<html>
<head>
  <title>Evernote Export</title>
  <basefont face="微软雅黑" size="2" />
  <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
  <meta name="exporter-version" content="YXBJ Windows/602051 (zh-CN, DDL); Windows/6.1.1 (Win64); EDAMVersion=V2;"/>
  <meta name="content-class" content="yinxiang.markdown"/>
  <style>
    body, td {
      font-family: 微软雅黑;
      font-size: 10pt;
    }
  </style>
</head>
<body>
<a name="1897"/>

<div><span><div style="font-size: 14px; margin: 0; padding: 0; width: 100%;"><div style="line-height: 160%; box-sizing: content-box;"><ul style="line-height: 160%; box-sizing: content-box; display: block; list-style-type: disc; padding-left: 30px; margin: 6px 0 10px; color: #333;"><li style="line-height: 160%; box-sizing: content-box; position: relative;"><a style="line-height: 160%; box-sizing: content-box; text-decoration: underline; color: #5286bc;">一、node基础
</a></li><li style="line-height: 160%; box-sizing: content-box; position: relative;"><a style="line-height: 160%; box-sizing: content-box; text-decoration: underline; color: #5286bc;">二、node的模块化规范：commonJS
</a></li><li style="line-height: 160%; box-sizing: content-box; position: relative;"><a style="line-height: 160%; box-sizing: content-box; text-decoration: underline; color: #5286bc;">三、node内置模块
</a><ul style="line-height: 160%; box-sizing: content-box; display: block; list-style-type: disc; padding-left: 30px; margin: 6px 0 10px; color: #333; margin-top: 0; margin-bottom: 0;"><li style="line-height: 160%; box-sizing: content-box; position: relative;"><a style="line-height: 160%; box-sizing: content-box; text-decoration: underline; color: #5286bc;">http模块
</a></li><li style="line-height: 160%; box-sizing: content-box; position: relative;"><a style="line-height: 160%; box-sizing: content-box; text-decoration: underline; color: #5286bc;">文件服务模块 - file system 模块
</a></li><li style="line-height: 160%; box-sizing: content-box; position: relative;"><a style="line-height: 160%; box-sizing: content-box; text-decoration: underline; color: #5286bc;">url模块
</a></li><li style="line-height: 160%; box-sizing: content-box; position: relative;"><a style="line-height: 160%; box-sizing: content-box; text-decoration: underline; color: #5286bc;">querystring 模块
</a></li></ul></li><li style="line-height: 160%; box-sizing: content-box; position: relative;"><a style="line-height: 160%; box-sizing: content-box; text-decoration: underline; color: #5286bc;">四、包管理器 - npm
</a></li><li style="line-height: 160%; box-sizing: content-box; position: relative;"><a style="line-height: 160%; box-sizing: content-box; text-decoration: underline; color: #5286bc;">五、Express的安装和使用
</a></li><li style="line-height: 160%; box-sizing: content-box; position: relative;"><a style="line-height: 160%; box-sizing: content-box; text-decoration: underline; color: #5286bc;">六、什么是中间件
</a></li><li style="line-height: 160%; box-sizing: content-box; position: relative;"><a style="line-height: 160%; box-sizing: content-box; text-decoration: underline; color: #5286bc;">七、express的路由介绍
</a></li><li style="line-height: 160%; box-sizing: content-box; position: relative;"><a style="line-height: 160%; box-sizing: content-box; text-decoration: underline; color: #5286bc;">八、项目的开发方式
</a></li><li style="line-height: 160%; box-sizing: content-box; position: relative;"><a style="line-height: 160%; box-sizing: content-box; text-decoration: underline; color: #5286bc;">作业：
</a></li><li style="line-height: 160%; box-sizing: content-box; position: relative;"><a style="line-height: 160%; box-sizing: content-box; text-decoration: underline; color: #5286bc;">加油！！！
</a></li></ul></div><h1 style="line-height: 160%; box-sizing: content-box; font-weight: 700; font-size: 41px; border-bottom: 3px double #999; color: #000; margin-top: 14px;">一、node基础</h1>
<ol style="line-height: 160%; box-sizing: content-box; display: block; padding-left: 30px; margin: 6px 0 10px; color: #333; list-style-type: decimal;">
<li style="line-height: 160%; box-sizing: content-box;">
<p style="line-height: 160%; box-sizing: content-box; margin: 10px 0; color: #333;">介绍</p>
<ul style="line-height: 160%; box-sizing: content-box; display: block; list-style-type: disc; padding-left: 30px; margin: 6px 0 10px; color: #333; margin-top: 0; margin-bottom: 0;">
<li style="line-height: 160%; box-sizing: content-box; position: relative;">作用：用来实现后台管理程序</li>
<li style="line-height: 160%; box-sizing: content-box; position: relative;">目的：数据服务，文件服务，web服务</li>
<li style="line-height: 160%; box-sizing: content-box; position: relative;">类似：php，.net，java(jsp) ....</li>
<li style="line-height: 160%; box-sizing: content-box; position: relative;">由 c++ 编写</li>
</ul>
</li>
<li style="line-height: 160%; box-sizing: content-box;">
<p style="line-height: 160%; box-sizing: content-box; margin: 10px 0; color: #333;">优势：</p>
<ul style="line-height: 160%; box-sizing: content-box; display: block; list-style-type: disc; padding-left: 30px; margin: 6px 0 10px; color: #333; margin-top: 0; margin-bottom: 0;">
<li style="line-height: 160%; box-sizing: content-box; position: relative;">性能高，方便，入门难</li>
<li style="line-height: 160%; box-sizing: content-box; position: relative;">能用的上的学习资料少，对程序员的要求高，大公司都在用（BAT）</li>
</ul>
</li>
<li style="line-height: 160%; box-sizing: content-box;">
<p style="line-height: 160%; box-sizing: content-box; margin: 10px 0; color: #333;">环境：nodejs + web服务器 + 数据库</p>
<ul style="line-height: 160%; box-sizing: content-box; display: block; list-style-type: disc; padding-left: 30px; margin: 6px 0 10px; color: #333; margin-top: 0; margin-bottom: 0;">
<li style="line-height: 160%; box-sizing: content-box; position: relative;">官网：<a href="https://nodejs.org/zh-cn/" style="line-height: 160%; box-sizing: content-box; text-decoration: underline; color: #5286bc;">https://nodejs.org/zh-cn/</a></li>
<li style="line-height: 160%; box-sizing: content-box; position: relative;">测试环境： 命令行(运行-&gt;cmd)-&gt;node -v</li>
</ul>
</li>
<li style="line-height: 160%; box-sizing: content-box;">
<p style="line-height: 160%; box-sizing: content-box; margin: 10px 0; color: #333;">劣势：</p>
<ul style="line-height: 160%; box-sizing: content-box; display: block; list-style-type: disc; padding-left: 30px; margin: 6px 0 10px; color: #333; margin-top: 0; margin-bottom: 0;">
<li style="line-height: 160%; box-sizing: content-box; position: relative;">服务器提供的相对较少 <a href="http://nodejs.cn/" style="line-height: 160%; box-sizing: content-box; text-decoration: underline; color: #5286bc;">http://nodejs.cn/</a></li>
</ul>
</li>
<li style="line-height: 160%; box-sizing: content-box;">
<p style="line-height: 160%; box-sizing: content-box; margin: 10px 0; color: #333;">版本介绍：</p>
<ul style="line-height: 160%; box-sizing: content-box; display: block; list-style-type: disc; padding-left: 30px; margin: 6px 0 10px; color: #333; margin-top: 0; margin-bottom: 0;">
<li style="line-height: 160%; box-sizing: content-box; position: relative;">Vx(主).x(子).x（修正）</li>
<li style="line-height: 160%; box-sizing: content-box; position: relative;">主：1/3的API发生巨变，使用方式变化了</li>
<li style="line-height: 160%; box-sizing: content-box; position: relative;">子：API没有删减，使用方式没变化，内部实现发生了变化</li>
<li style="line-height: 160%; box-sizing: content-box; position: relative;">修正版：什么都没变，处理一下bug
<ul style="line-height: 160%; box-sizing: content-box; display: block; list-style-type: disc; padding-left: 30px; margin: 6px 0 10px; color: #333; margin-top: 0; margin-bottom: 0;">
<li style="line-height: 160%; box-sizing: content-box; position: relative;">V6.8.x 稳定</li>
<li style="line-height: 160%; box-sizing: content-box; position: relative;">V6.9.x 非稳定版</li>
<li style="line-height: 160%; box-sizing: content-box; position: relative;">Vx.x.x-beta 测试</li>
<li style="line-height: 160%; box-sizing: content-box; position: relative;">vx.x.x-rc 测试稳定</li>
<li style="line-height: 160%; box-sizing: content-box; position: relative;">vx.x.x-alpha 测试稳定</li>
</ul>
</li>
</ul>
</li>
<li style="line-height: 160%; box-sizing: content-box;">
<p style="line-height: 160%; box-sizing: content-box; margin: 10px 0; color: #333;">运行：</p>
<ul style="line-height: 160%; box-sizing: content-box; display: block; list-style-type: disc; padding-left: 30px; margin: 6px 0 10px; color: #333; margin-top: 0; margin-bottom: 0;">
<li style="line-height: 160%; box-sizing: content-box; position: relative;">DOS命令（小黑框）:
<ul style="line-height: 160%; box-sizing: content-box; display: block; list-style-type: disc; padding-left: 30px; margin: 6px 0 10px; color: #333; margin-top: 0; margin-bottom: 0;">
<li style="line-height: 160%; box-sizing: content-box; position: relative;">win+r -&gt; cmd回车 -&gt; cd 目录 -&gt; node 文件名.js | node 文件名</li>
<li style="line-height: 160%; box-sizing: content-box; position: relative;">vscode -&gt; 终端</li>
<li style="line-height: 160%; box-sizing: content-box; position: relative;">当前目录 -&gt; 右键 -&gt; git bash -&gt; node 文件名</li>
</ul>
</li>
<li style="line-height: 160%; box-sizing: content-box; position: relative;">linux/centos(git):
<ul style="line-height: 160%; box-sizing: content-box; display: block; list-style-type: disc; padding-left: 30px; margin: 6px 0 10px; color: #333; margin-top: 0; margin-bottom: 0;">
<li style="line-height: 160%; box-sizing: content-box; position: relative;">终端 -&gt; cd 目录 -&gt; node 文件名.js | node 文件名</li>
</ul>
</li>
</ul>
</li>
<li style="line-height: 160%; box-sizing: content-box;">
<p style="line-height: 160%; box-sizing: content-box; margin: 10px 0; color: #333;">node命令行:</p>
<ul style="line-height: 160%; box-sizing: content-box; display: block; list-style-type: disc; padding-left: 30px; margin: 6px 0 10px; color: #333; margin-top: 0; margin-bottom: 0;">
<li style="line-height: 160%; box-sizing: content-box; position: relative;">DOS -&gt; node 回车 -&gt; 编写+运行</li>
<li style="line-height: 160%; box-sizing: content-box; position: relative;">一般只是测试API的可用度</li>
</ul>
</li>
<li style="line-height: 160%; box-sizing: content-box;">
<p style="line-height: 160%; box-sizing: content-box; margin: 10px 0; color: #333;">注意：</p>
<ul style="line-height: 160%; box-sizing: content-box; display: block; list-style-type: disc; padding-left: 30px; margin: 6px 0 10px; color: #333; margin-top: 0; margin-bottom: 0;">
<li style="line-height: 160%; box-sizing: content-box; position: relative;">DOM/BOM 不可用</li>
<li style="line-height: 160%; box-sizing: content-box; position: relative;">ECMA 可用</li>
</ul>
</li>
</ol>
<h1 style="line-height: 160%; box-sizing: content-box; font-weight: 700; font-size: 41px; border-bottom: 3px double #999; color: #000;">二、node的模块化规范：commonJS</h1>
<ul style="line-height: 160%; box-sizing: content-box; display: block; list-style-type: disc; padding-left: 30px; margin: 6px 0 10px; color: #333;">
<li style="line-height: 160%; box-sizing: content-box; position: relative;">commonJS 是 nodejs 默认模块管理方式,不支持es6的模块化管理方式，但支持所有es6+语法</li>
</ul>
<ol style="line-height: 160%; box-sizing: content-box; display: block; padding-left: 30px; margin: 6px 0 10px; color: #333; list-style-type: decimal;">
<li style="line-height: 160%; box-sizing: content-box;">
<p style="line-height: 160%; box-sizing: content-box; margin: 10px 0; color: #333;">模块化的目的</p>
<ul style="line-height: 160%; box-sizing: content-box; display: block; list-style-type: disc; padding-left: 30px; margin: 6px 0 10px; color: #333; margin-top: 0; margin-bottom: 0;">
<li style="line-height: 160%; box-sizing: content-box; position: relative;">是主要为了JS在后端的表现制定</li>
<li style="line-height: 160%; box-sizing: content-box; position: relative;">commonJS 是个规范 nodejs / webpack 是一个实现</li>
<li style="line-height: 160%; box-sizing: content-box; position: relative;">ECMA 是个规范  js 实现了</li>
</ul>
</li>
<li style="line-height: 160%; box-sizing: content-box;">
<p style="line-height: 160%; box-sizing: content-box; margin: 10px 0; color: #333;">模块化方式</p>
<ul style="line-height: 160%; box-sizing: content-box; display: block; list-style-type: disc; padding-left: 30px; margin: 6px 0 10px; color: #333; margin-top: 0; margin-bottom: 0;">
<li style="line-height: 160%; box-sizing: content-box; position: relative;">服务器端JS：相同的代码需要多次执行 | CPU和内存资源是瓶颈 | 加载时从磁盘中加载
<ul style="line-height: 160%; box-sizing: content-box; display: block; list-style-type: disc; padding-left: 30px; margin: 6px 0 10px; color: #333; margin-top: 0; margin-bottom: 0;">
<li style="line-height: 160%; box-sizing: content-box; position: relative;">node模块： http / fs / querystring / url</li>
<li style="line-height: 160%; box-sizing: content-box; position: relative;">模块化方式：require('模块名')  系统模块</li>
</ul>
</li>
<li style="line-height: 160%; box-sizing: content-box; position: relative;">浏览器端js：代码需要从一个服务器端分发到多个客户端执行 | 带宽是瓶颈 | 通过网络加载
<ul style="line-height: 160%; box-sizing: content-box; display: block; list-style-type: disc; padding-left: 30px; margin: 6px 0 10px; color: #333; margin-top: 0; margin-bottom: 0;">
<li style="line-height: 160%; box-sizing: content-box; position: relative;">模块化方式：require、module、exports</li>
<li style="line-height: 160%; box-sizing: content-box; position: relative;">seajs.js / require.js   CMD/AMD</li>
</ul>
</li>
</ul>
</li>
<li style="line-height: 160%; box-sizing: content-box;">
<p style="line-height: 160%; box-sizing: content-box; margin: 10px 0; color: #333;">commonJS模块化方式</p>
<ul style="line-height: 160%; box-sizing: content-box; display: block; list-style-type: disc; padding-left: 30px; margin: 6px 0 10px; color: #333; margin-top: 0; margin-bottom: 0;">
<li style="line-height: 160%; box-sizing: content-box; position: relative;">
<p style="line-height: 160%; box-sizing: content-box; color: #333; margin: 0;">require 引入模块、输入</p>
<ul style="line-height: 160%; box-sizing: content-box; display: block; list-style-type: disc; padding-left: 30px; margin: 6px 0 10px; color: #333; margin-top: 0; margin-bottom: 0;">
<li style="line-height: 160%; box-sizing: content-box; position: relative;"><code style="line-height: 160%; box-sizing: content-box; border: 0; border-radius: 0; color: #c1788b; padding: 4px 4px 2px 0; letter-spacing: -.3px;">require('模块名')</code>
<ul style="line-height: 160%; box-sizing: content-box; display: block; list-style-type: disc; padding-left: 30px; margin: 6px 0 10px; color: #333; margin-top: 0; margin-bottom: 0;">
<li style="line-height: 160%; box-sizing: content-box; position: relative;">不指定路径：先找系统模块 -&gt; 再从项目环境找node_modules | bower_components (依赖模块)-&gt; not found</li>
<li style="line-height: 160%; box-sizing: content-box; position: relative;">指定路径：指定路径 -&gt; not found</li>
</ul>
</li>
<li style="line-height: 160%; box-sizing: content-box; position: relative;">require输入的是一个对象</li>
</ul>
</li>
<li style="line-height: 160%; box-sizing: content-box; position: relative;">
<p style="line-height: 160%; box-sizing: content-box; color: #333; margin: 0;">exports 导出，批量输出，都是属性</p>
<ul style="line-height: 160%; box-sizing: content-box; display: block; list-style-type: disc; padding-left: 30px; margin: 6px 0 10px; color: #333; margin-top: 0; margin-bottom: 0;">
<li style="line-height: 160%; box-sizing: content-box; position: relative;"><code style="line-height: 160%; box-sizing: content-box; border: 0; border-radius: 0; color: #c1788b; padding: 4px 4px 2px 0; letter-spacing: -.3px;">exports.自定义属性 = 值</code></li>
</ul>
</li>
<li style="line-height: 160%; box-sizing: content-box; position: relative;">
<p style="line-height: 160%; box-sizing: content-box; color: #333; margin: 0;">module 默认输出，只能输出一次，require输入的是任意接收</p>
<ul style="line-height: 160%; box-sizing: content-box; display: block; list-style-type: disc; padding-left: 30px; margin: 6px 0 10px; color: #333; margin-top: 0; margin-bottom: 0;">
<li style="line-height: 160%; box-sizing: content-box; position: relative;"><code style="line-height: 160%; box-sizing: content-box; border: 0; border-radius: 0; color: #c1788b; padding: 4px 4px 2px 0; letter-spacing: -.3px;">module.exports = { 自定义属性：值 }</code></li>
</ul>
</li>
</ul>
</li>
</ol>
<h1 style="line-height: 160%; box-sizing: content-box; font-weight: 700; font-size: 41px; border-bottom: 3px double #999; color: #000;">三、node内置模块</h1>
<h3 style="line-height: 160%; box-sizing: content-box; font-weight: 700; font-size: 27px; color: #333;">http模块</h3>
<ul style="line-height: 160%; box-sizing: content-box; display: block; list-style-type: disc; padding-left: 30px; margin: 6px 0 10px; color: #333;">
<li style="line-height: 160%; box-sizing: content-box; position: relative;">nodejs搭建web服务器</li>
</ul>
<ol style="line-height: 160%; box-sizing: content-box; display: block; padding-left: 30px; margin: 6px 0 10px; color: #333; list-style-type: decimal;">
<li style="line-height: 160%; box-sizing: content-box;">
<p style="line-height: 160%; box-sizing: content-box; margin: 10px 0; color: #333;">引入模块：<code style="line-height: 160%; box-sizing: content-box; border: 0; border-radius: 0; color: #c1788b; padding: 4px 4px 2px 0; letter-spacing: -.3px;">const http = require('http');</code></p>
</li>
<li style="line-height: 160%; box-sizing: content-box;">
<p style="line-height: 160%; box-sizing: content-box; margin: 10px 0; color: #333;">创建服务：</p>
<ul style="line-height: 160%; box-sizing: content-box; display: block; list-style-type: disc; padding-left: 30px; margin: 6px 0 10px; color: #333; margin-top: 0; margin-bottom: 0;">
<li style="line-height: 160%; box-sizing: content-box; position: relative;"><code style="line-height: 160%; box-sizing: content-box; border: 0; border-radius: 0; color: #c1788b; padding: 4px 4px 2px 0; letter-spacing: -.3px;">server/app = http.createServer(函数(req,res));</code>  // 返回http对象
<ul style="line-height: 160%; box-sizing: content-box; display: block; list-style-type: disc; padding-left: 30px; margin: 6px 0 10px; color: #333; margin-top: 0; margin-bottom: 0;">
<li style="line-height: 160%; box-sizing: content-box; position: relative;">require：请求：浏览器 -&gt; 服务器
<ul style="line-height: 160%; box-sizing: content-box; display: block; list-style-type: disc; padding-left: 30px; margin: 6px 0 10px; color: #333; margin-top: 0; margin-bottom: 0;">
<li style="line-height: 160%; box-sizing: content-box; position: relative;"><code style="line-height: 160%; box-sizing: content-box; border: 0; border-radius: 0; color: #c1788b; padding: 4px 4px 2px 0; letter-spacing: -.3px;">req.url</code>     地址，提取地址栏数据</li>
<li style="line-height: 160%; box-sizing: content-box; position: relative;"><code style="line-height: 160%; box-sizing: content-box; border: 0; border-radius: 0; color: #c1788b; padding: 4px 4px 2px 0; letter-spacing: -.3px;">req.on('data|end');</code>     提取非地址栏数据，所有的http[s]都会触发end事件</li>
</ul>
</li>
<li style="line-height: 160%; box-sizing: content-box; position: relative;">response：响应：服务器 -&gt; 浏览器
<ul style="line-height: 160%; box-sizing: content-box; display: block; list-style-type: disc; padding-left: 30px; margin: 6px 0 10px; color: #333; margin-top: 0; margin-bottom: 0;">
<li style="line-height: 160%; box-sizing: content-box; position: relative;">响应头设置：<code style="line-height: 160%; box-sizing: content-box; border: 0; border-radius: 0; color: #c1788b; padding: 4px 4px 2px 0; letter-spacing: -.3px;">res.writeHead(200,{'Content-Type':'text/html;charset=utf-8'});</code></li>
<li style="line-height: 160%; box-sizing: content-box; position: relative;"><code style="line-height: 160%; box-sizing: content-box; border: 0; border-radius: 0; color: #c1788b; padding: 4px 4px 2px 0; letter-spacing: -.3px;">res.write(字符/数据&lt;string&gt;&lt;buffer&gt;)</code></li>
<li style="line-height: 160%; box-sizing: content-box; position: relative;"><code style="line-height: 160%; box-sizing: content-box; border: 0; border-radius: 0; color: #c1788b; padding: 4px 4px 2px 0; letter-spacing: -.3px;">res.end();</code> 结束响应</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li style="line-height: 160%; box-sizing: content-box;">
<p style="line-height: 160%; box-sizing: content-box; margin: 10px 0; color: #333;">监听：</p>
<ul style="line-height: 160%; box-sizing: content-box; display: block; list-style-type: disc; padding-left: 30px; margin: 6px 0 10px; color: #333; margin-top: 0; margin-bottom: 0;">
<li style="line-height: 160%; box-sizing: content-box; position: relative;"><code style="line-height: 160%; box-sizing: content-box; border: 0; border-radius: 0; color: #c1788b; padding: 4px 4px 2px 0; letter-spacing: -.3px;">server.listen(端口，[地址]，[回调])</code>
<ul style="line-height: 160%; box-sizing: content-box; display: block; list-style-type: disc; padding-left: 30px; margin: 6px 0 10px; color: #333; margin-top: 0; margin-bottom: 0;">
<li style="line-height: 160%; box-sizing: content-box; position: relative;">端口：1-65535，1024以下系统占用，80</li>
<li style="line-height: 160%; box-sizing: content-box; position: relative;">地址：虚拟localhost  真实域名xx.duapp.com</li>
<li style="line-height: 160%; box-sizing: content-box; position: relative;">回调：监听成功，回调一次</li>
</ul>
</li>
</ul>
</li>
<li style="line-height: 160%; box-sizing: content-box;">
<p style="line-height: 160%; box-sizing: content-box; margin: 10px 0; color: #333;">小提示：</p>
<ul style="line-height: 160%; box-sizing: content-box; display: block; list-style-type: disc; padding-left: 30px; margin: 6px 0 10px; color: #333; margin-top: 0; margin-bottom: 0;">
<li style="line-height: 160%; box-sizing: content-box; position: relative;">服务器代码更新后，需要重启服务器
<ul style="line-height: 160%; box-sizing: content-box; display: block; list-style-type: disc; padding-left: 30px; margin: 6px 0 10px; color: #333; margin-top: 0; margin-bottom: 0;">
<li style="line-height: 160%; box-sizing: content-box; position: relative;">自动重启工具: supervisor | nodemon   命令行工具</li>
<li style="line-height: 160%; box-sizing: content-box; position: relative;"><code style="line-height: 160%; box-sizing: content-box; border: 0; border-radius: 0; color: #c1788b; padding: 4px 4px 2px 0; letter-spacing: -.3px;">npm install supervisor -g | npm install nodemon -g</code></li>
</ul>
</li>
<li style="line-height: 160%; box-sizing: content-box; position: relative;">接口测试工具
<ul style="line-height: 160%; box-sizing: content-box; display: block; list-style-type: disc; padding-left: 30px; margin: 6px 0 10px; color: #333; margin-top: 0; margin-bottom: 0;">
<li style="line-height: 160%; box-sizing: content-box; position: relative;">postman</li>
<li style="line-height: 160%; box-sizing: content-box; position: relative;">insominia</li>
</ul>
</li>
</ul>
</li>
</ol>
<h3 style="line-height: 160%; box-sizing: content-box; font-weight: 700; font-size: 27px; color: #333;">文件服务模块 - file system 模块</h3>
<ol style="line-height: 160%; box-sizing: content-box; display: block; padding-left: 30px; margin: 6px 0 10px; color: #333; list-style-type: decimal;">
<li style="line-height: 160%; box-sizing: content-box;">
<p style="line-height: 160%; box-sizing: content-box; margin: 10px 0; color: #333;">引入模块：<code style="line-height: 160%; box-sizing: content-box; border: 0; border-radius: 0; color: #c1788b; padding: 4px 4px 2px 0; letter-spacing: -.3px;">const fs = require('fs');</code></p>
</li>
<li style="line-height: 160%; box-sizing: content-box;">
<p style="line-height: 160%; box-sizing: content-box; margin: 10px 0; color: #333;">功能：读，写，删，改</p>
<ul style="line-height: 160%; box-sizing: content-box; display: block; list-style-type: disc; padding-left: 30px; margin: 6px 0 10px; color: #333; margin-top: 0; margin-bottom: 0;">
<li style="line-height: 160%; box-sizing: content-box; position: relative;">
<p style="line-height: 160%; box-sizing: content-box; color: #333; margin: 0;">读：</p>
<ol style="line-height: 160%; box-sizing: content-box; display: block; padding-left: 30px; margin: 6px 0 10px; color: #333; list-style-type: decimal; margin-top: 0; margin-bottom: 0;">
<li style="line-height: 160%; box-sizing: content-box; position: relative;">
<p style="line-height: 160%; box-sizing: content-box; color: #333; margin: 0;"><code style="line-height: 160%; box-sizing: content-box; border: 0; border-radius: 0; color: #c1788b; padding: 4px 4px 2px 0; letter-spacing: -.3px;">fs.readFile('路径',[配置],回调(err,data))</code></p>
<ul style="line-height: 160%; box-sizing: content-box; display: block; list-style-type: disc; padding-left: 30px; margin: 6px 0 10px; color: #333; margin-top: 0; margin-bottom: 0;">
<li style="line-height: 160%; box-sizing: content-box; position: relative;">有回调，是异步
<ul style="line-height: 160%; box-sizing: content-box; display: block; list-style-type: disc; padding-left: 30px; margin: 6px 0 10px; color: #333; margin-top: 0; margin-bottom: 0;">
<li style="line-height: 160%; box-sizing: content-box; position: relative;">err：错误，null或者undefined，表示没有错误
<ul style="line-height: 160%; box-sizing: content-box; display: block; list-style-type: disc; padding-left: 30px; margin: 6px 0 10px; color: #333; margin-top: 0; margin-bottom: 0;">
<li style="line-height: 160%; box-sizing: content-box; position: relative;">ps:错误优先机制，回调函数的第一个参数为错误信息</li>
</ul>
</li>
<li style="line-height: 160%; box-sizing: content-box; position: relative;">data：二进制buffer流
<ul style="line-height: 160%; box-sizing: content-box; display: block; list-style-type: disc; padding-left: 30px; margin: 6px 0 10px; color: #333; margin-top: 0; margin-bottom: 0;">
<li style="line-height: 160%; box-sizing: content-box; position: relative;">ps:想获得原字符串内容就要加toString()方法</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li style="line-height: 160%; box-sizing: content-box; position: relative;">
<p style="line-height: 160%; box-sizing: content-box; color: #333; margin: 0;"><code style="line-height: 160%; box-sizing: content-box; border: 0; border-radius: 0; color: #c1788b; padding: 4px 4px 2px 0; letter-spacing: -.3px;">let data = fs.readFileSync('路径',[配置])</code></p>
<ul style="line-height: 160%; box-sizing: content-box; display: block; list-style-type: disc; padding-left: 30px; margin: 6px 0 10px; color: #333; margin-top: 0; margin-bottom: 0;">
<li style="line-height: 160%; box-sizing: content-box; position: relative;">同步，免去回调地狱，尽量用这种写法，但是比较占用时间</li>
</ul>
</li>
<li style="line-height: 160%; box-sizing: content-box; position: relative;">
<p style="line-height: 160%; box-sizing: content-box; color: #333; margin: 0;">结论：异步读取文件由操作系统在后台读取，不会阻碍下面代码执行。同步读取阻碍下面代码执行。</p>
</li>
</ol>
</li>
<li style="line-height: 160%; box-sizing: content-box; position: relative;">
<p style="line-height: 160%; box-sizing: content-box; color: #333; margin: 0;">写：</p>
<ol style="line-height: 160%; box-sizing: content-box; display: block; padding-left: 30px; margin: 6px 0 10px; color: #333; list-style-type: decimal; margin-top: 0; margin-bottom: 0;">
<li style="line-height: 160%; box-sizing: content-box; position: relative;"><code style="line-height: 160%; box-sizing: content-box; border: 0; border-radius: 0; color: #c1788b; padding: 4px 4px 2px 0; letter-spacing: -.3px;">fs.writeFile('路径','内容',回调(err))</code>
<ul style="line-height: 160%; box-sizing: content-box; display: block; list-style-type: disc; padding-left: 30px; margin: 6px 0 10px; color: #333; margin-top: 0; margin-bottom: 0;">
<li style="line-height: 160%; box-sizing: content-box; position: relative;">有回调，是异步
<ul style="line-height: 160%; box-sizing: content-box; display: block; list-style-type: disc; padding-left: 30px; margin: 6px 0 10px; color: #333; margin-top: 0; margin-bottom: 0;">
<li style="line-height: 160%; box-sizing: content-box; position: relative;">err：错误，null或者undefined，表示没有错误</li>
</ul>
</li>
</ul>
</li>
<li style="line-height: 160%; box-sizing: content-box; position: relative;"><code style="line-height: 160%; box-sizing: content-box; border: 0; border-radius: 0; color: #c1788b; padding: 4px 4px 2px 0; letter-spacing: -.3px;">let data = fs.writeFileSync('路径','内容')</code>
<ul style="line-height: 160%; box-sizing: content-box; display: block; list-style-type: disc; padding-left: 30px; margin: 6px 0 10px; color: #333; margin-top: 0; margin-bottom: 0;">
<li style="line-height: 160%; box-sizing: content-box; position: relative;">同步，免去回调地狱，尽量用这种写法，但是比较占用时间</li>
</ul>
</li>
</ol>
</li>
<li style="line-height: 160%; box-sizing: content-box; position: relative;">
<p style="line-height: 160%; box-sizing: content-box; color: #333; margin: 0;">删：<br/>
<code style="line-height: 160%; box-sizing: content-box; border: 0; border-radius: 0; color: #c1788b; padding: 4px 4px 2px 0; letter-spacing: -.3px;">fs.unlink('路径',回调)</code></p>
</li>
<li style="line-height: 160%; box-sizing: content-box; position: relative;">
<p style="line-height: 160%; box-sizing: content-box; color: #333; margin: 0;">改名：<br/>
<code style="line-height: 160%; box-sizing: content-box; border: 0; border-radius: 0; color: #c1788b; padding: 4px 4px 2px 0; letter-spacing: -.3px;">fs.rename('老文件名','新文件名',(err)=&gt;{})</code></p>
</li>
</ul>
</li>
<li style="line-height: 160%; box-sizing: content-box;">
<p style="line-height: 160%; box-sizing: content-box; margin: 10px 0; color: #333;">实现静态资源托管:</p>
<ul style="line-height: 160%; box-sizing: content-box; display: block; list-style-type: disc; padding-left: 30px; margin: 6px 0 10px; color: #333; margin-top: 0; margin-bottom: 0;">
<li style="line-height: 160%; box-sizing: content-box; position: relative;">什么是静态资源： css/html/js/图片/json/字体...</li>
<li style="line-height: 160%; box-sizing: content-box; position: relative;">前端资源请求:
<ul style="line-height: 160%; box-sizing: content-box; display: block; list-style-type: disc; padding-left: 30px; margin: 6px 0 10px; color: #333; margin-top: 0; margin-bottom: 0;">
<li style="line-height: 160%; box-sizing: content-box; position: relative;">href/src/locaction.href</li>
</ul>
</li>
<li style="line-height: 160%; box-sizing: content-box; position: relative;">后端资源读取：<br/>
<code style="line-height: 160%; box-sizing: content-box; border: 0; border-radius: 0; color: #c1788b; padding: 4px 4px 2px 0; letter-spacing: -.3px;">fs.readFile(文件名,[编码],回调(err,data));</code></li>
</ul>
</li>
</ol>
<h3 style="line-height: 160%; box-sizing: content-box; font-weight: 700; font-size: 27px; color: #333;">url模块</h3>
<ol style="line-height: 160%; box-sizing: content-box; display: block; padding-left: 30px; margin: 6px 0 10px; color: #333; list-style-type: decimal;">
<li style="line-height: 160%; box-sizing: content-box;">作用：处理地址栏型数据</li>
<li style="line-height: 160%; box-sizing: content-box;">引入：<code style="line-height: 160%; box-sizing: content-box; border: 0; border-radius: 0; color: #c1788b; padding: 4px 4px 2px 0; letter-spacing: -.3px;">const url = require(&quot;url&quot;);</code></li>
<li style="line-height: 160%; box-sizing: content-box;">使用：
<ul style="line-height: 160%; box-sizing: content-box; display: block; list-style-type: disc; padding-left: 30px; margin: 6px 0 10px; color: #333; margin-top: 0; margin-bottom: 0;">
<li style="line-height: 160%; box-sizing: content-box; position: relative;">字符转对象
<ul style="line-height: 160%; box-sizing: content-box; display: block; list-style-type: disc; padding-left: 30px; margin: 6px 0 10px; color: #333; margin-top: 0; margin-bottom: 0;">
<li style="line-height: 160%; box-sizing: content-box; position: relative;"><code style="line-height: 160%; box-sizing: content-box; border: 0; border-radius: 0; color: #c1788b; padding: 4px 4px 2px 0; letter-spacing: -.3px;">str = &quot;http://localhost:8002/aaa?username=sdfsdf&amp;content=234234#title4&quot;;</code></li>
<li style="line-height: 160%; box-sizing: content-box; position: relative;"><code style="line-height: 160%; box-sizing: content-box; border: 0; border-radius: 0; color: #c1788b; padding: 4px 4px 2px 0; letter-spacing: -.3px;">url.parse(str,true)</code>
<ul style="line-height: 160%; box-sizing: content-box; display: block; list-style-type: disc; padding-left: 30px; margin: 6px 0 10px; color: #333; margin-top: 0; margin-bottom: 0;">
<li style="line-height: 160%; box-sizing: content-box; position: relative;">true 处理query数据，直接转成对象</li>
</ul>
</li>
<li style="line-height: 160%; box-sizing: content-box; position: relative;">obj参数
<ul style="line-height: 160%; box-sizing: content-box; display: block; list-style-type: disc; padding-left: 30px; margin: 6px 0 10px; color: #333; margin-top: 0; margin-bottom: 0;">
<li style="line-height: 160%; box-sizing: content-box; position: relative;">protocol: 'http:'，  协议</li>
<li style="line-height: 160%; box-sizing: content-box; position: relative;">slashes: true，  双斜杠</li>
<li style="line-height: 160%; box-sizing: content-box; position: relative;">auth: null，  作者</li>
<li style="line-height: 160%; box-sizing: content-box; position: relative;">host: 'localhost:8002'，  主机 www.baidu.com</li>
<li style="line-height: 160%; box-sizing: content-box; position: relative;">port: '8002'，  端口</li>
<li style="line-height: 160%; box-sizing: content-box; position: relative;">hostname: 'localhost'，  baidu</li>
<li style="line-height: 160%; box-sizing: content-box; position: relative;">hash: '#title'，  哈希（锚)</li>
<li style="line-height: 160%; box-sizing: content-box; position: relative;">search: '?username=sdfsdf&amp;content=234234'，  数据</li>
<li style="line-height: 160%; box-sizing: content-box; position: relative;">query: 'username=sdfsdf&amp;content=234234'，  数据</li>
<li style="line-height: 160%; box-sizing: content-box; position: relative;">pathname: '/aaa'，  文件路径</li>
<li style="line-height: 160%; box-sizing: content-box; position: relative;">path: '/aaa?username=sdfsdf&amp;content=234234'，  文件路径</li>
<li style="line-height: 160%; box-sizing: content-box; position: relative;">href: 'http://localhost:8002/aaa?username=sdfsdf&amp;content=234234#title'</li>
</ul>
</li>
</ul>
</li>
<li style="line-height: 160%; box-sizing: content-box; position: relative;">对象转字符
<ul style="line-height: 160%; box-sizing: content-box; display: block; list-style-type: disc; padding-left: 30px; margin: 6px 0 10px; color: #333; margin-top: 0; margin-bottom: 0;">
<li style="line-height: 160%; box-sizing: content-box; position: relative;"><code style="line-height: 160%; box-sizing: content-box; border: 0; border-radius: 0; color: #c1788b; padding: 4px 4px 2px 0; letter-spacing: -.3px;">url.format(obj)</code></li>
</ul>
</li>
</ul>
</li>
</ol>
<h3 style="line-height: 160%; box-sizing: content-box; font-weight: 700; font-size: 27px; color: #333;">querystring 模块</h3>
<ol style="line-height: 160%; box-sizing: content-box; display: block; padding-left: 30px; margin: 6px 0 10px; color: #333; list-style-type: decimal;">
<li style="line-height: 160%; box-sizing: content-box;">作用：处理查询字符串
<ul style="line-height: 160%; box-sizing: content-box; display: block; list-style-type: disc; padding-left: 30px; margin: 6px 0 10px; color: #333; margin-top: 0; margin-bottom: 0;">
<li style="line-height: 160%; box-sizing: content-box; position: relative;"><code style="line-height: 160%; box-sizing: content-box; border: 0; border-radius: 0; color: #c1788b; padding: 4px 4px 2px 0; letter-spacing: -.3px;">var str = &quot;?key=value&amp;key2=value2&quot;;</code></li>
</ul>
</li>
<li style="line-height: 160%; box-sizing: content-box;">引入：<code style="line-height: 160%; box-sizing: content-box; border: 0; border-radius: 0; color: #c1788b; padding: 4px 4px 2px 0; letter-spacing: -.3px;">const querystring = require(&quot;querystring&quot;);</code></li>
<li style="line-height: 160%; box-sizing: content-box;">字符转对象：
<ul style="line-height: 160%; box-sizing: content-box; display: block; list-style-type: disc; padding-left: 30px; margin: 6px 0 10px; color: #333; margin-top: 0; margin-bottom: 0;">
<li style="line-height: 160%; box-sizing: content-box; position: relative;"><code style="line-height: 160%; box-sizing: content-box; border: 0; border-radius: 0; color: #c1788b; padding: 4px 4px 2px 0; letter-spacing: -.3px;">querystring.parse(str)</code></li>
</ul>
</li>
<li style="line-height: 160%; box-sizing: content-box;">对象转字符
<ul style="line-height: 160%; box-sizing: content-box; display: block; list-style-type: disc; padding-left: 30px; margin: 6px 0 10px; color: #333; margin-top: 0; margin-bottom: 0;">
<li style="line-height: 160%; box-sizing: content-box; position: relative;"><code style="line-height: 160%; box-sizing: content-box; border: 0; border-radius: 0; color: #c1788b; padding: 4px 4px 2px 0; letter-spacing: -.3px;">querystring.stringify(obj)</code></li>
</ul>
</li>
</ol>
<h1 style="line-height: 160%; box-sizing: content-box; font-weight: 700; font-size: 41px; border-bottom: 3px double #999; color: #000;">四、包管理器 - npm</h1>
<ol style="line-height: 160%; box-sizing: content-box; display: block; padding-left: 30px; margin: 6px 0 10px; color: #333; list-style-type: decimal;">
<li style="line-height: 160%; box-sizing: content-box;">
<p style="line-height: 160%; box-sizing: content-box; margin: 10px 0; color: #333;">介绍：</p>
<ul style="line-height: 160%; box-sizing: content-box; display: block; list-style-type: disc; padding-left: 30px; margin: 6px 0 10px; color: #333; margin-top: 0; margin-bottom: 0;">
<li style="line-height: 160%; box-sizing: content-box; position: relative;">作用：安装模块（包），自动安装依赖，管理包（增，删，更新，项目所有包)</li>
<li style="line-height: 160%; box-sizing: content-box; position: relative;">nodejs 环境自带 npm 环境
<ul style="line-height: 160%; box-sizing: content-box; display: block; list-style-type: disc; padding-left: 30px; margin: 6px 0 10px; color: #333; margin-top: 0; margin-bottom: 0;">
<li style="line-height: 160%; box-sizing: content-box; position: relative;">文档：<a href="https://www.npmjs.cn/" style="line-height: 160%; box-sizing: content-box; text-decoration: underline; color: #5286bc;">https://www.npmjs.cn/</a></li>
<li style="line-height: 160%; box-sizing: content-box; position: relative;">镜像：<a href="http://npm.taobao.org/" style="line-height: 160%; box-sizing: content-box; text-decoration: underline; color: #5286bc;">http://npm.taobao.org/</a></li>
</ul>
</li>
<li style="line-height: 160%; box-sizing: content-box; position: relative;">类似：<a href="https://bower.io/" style="line-height: 160%; box-sizing: content-box; text-decoration: underline; color: #5286bc;">bower</a>，<a href="https://yarn.bootcss.com" style="line-height: 160%; box-sizing: content-box; text-decoration: underline; color: #5286bc;">yarn</a></li>
</ul>
</li>
<li style="line-height: 160%; box-sizing: content-box;">
<p style="line-height: 160%; box-sizing: content-box; margin: 10px 0; color: #333;">安装环境位置：</p>
<ol style="line-height: 160%; box-sizing: content-box; display: block; padding-left: 30px; margin: 6px 0 10px; color: #333; list-style-type: decimal; margin-top: 0; margin-bottom: 0;">
<li style="line-height: 160%; box-sizing: content-box;">
<p style="line-height: 160%; box-sizing: content-box; margin: 10px 0; color: #333;">全局：可以独立运行 || 通过npm run 运行</p>
<ul style="line-height: 160%; box-sizing: content-box; display: block; list-style-type: disc; padding-left: 30px; margin: 6px 0 10px; color: #333; margin-top: 0; margin-bottom: 0;">
<li style="line-height: 160%; box-sizing: content-box; position: relative;">工具命令行，脚手架</li>
<li style="line-height: 160%; box-sizing: content-box; position: relative;">安装、卸载到全局
<ul style="line-height: 160%; box-sizing: content-box; display: block; list-style-type: disc; padding-left: 30px; margin: 6px 0 10px; color: #333; margin-top: 0; margin-bottom: 0;">
<li style="line-height: 160%; box-sizing: content-box; position: relative;">npm i 包名 -g
<ul style="line-height: 160%; box-sizing: content-box; display: block; list-style-type: disc; padding-left: 30px; margin: 6px 0 10px; color: #333; margin-top: 0; margin-bottom: 0;">
<li style="line-height: 160%; box-sizing: content-box; position: relative;">g == golbal</li>
<li style="line-height: 160%; box-sizing: content-box; position: relative;">yarn add 包名 |  bower install 包名</li>
</ul>
</li>
<li style="line-height: 160%; box-sizing: content-box; position: relative;">npm uninstall 包名 -g
<ul style="line-height: 160%; box-sizing: content-box; display: block; list-style-type: disc; padding-left: 30px; margin: 6px 0 10px; color: #333; margin-top: 0; margin-bottom: 0;">
<li style="line-height: 160%; box-sizing: content-box; position: relative;">yarn remove 包名 | bower uninstall 包名</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li style="line-height: 160%; box-sizing: content-box;">
<p style="line-height: 160%; box-sizing: content-box; margin: 10px 0; color: #333;">项目环境：只能通过npm run 运行</p>
<ul style="line-height: 160%; box-sizing: content-box; display: block; list-style-type: disc; padding-left: 30px; margin: 6px 0 10px; color: #333; margin-top: 0; margin-bottom: 0;">
<li style="line-height: 160%; box-sizing: content-box; position: relative;">项目依赖dependencies：
<ul style="line-height: 160%; box-sizing: content-box; display: block; list-style-type: disc; padding-left: 30px; margin: 6px 0 10px; color: #333; margin-top: 0; margin-bottom: 0;">
<li style="line-height: 160%; box-sizing: content-box; position: relative;">运行时的依赖，发布后，即生产环境下还需要用的模块。  --save || -S
<ul style="line-height: 160%; box-sizing: content-box; display: block; list-style-type: disc; padding-left: 30px; margin: 6px 0 10px; color: #333; margin-top: 0; margin-bottom: 0;">
<li style="line-height: 160%; box-sizing: content-box; position: relative;">express，jquery</li>
</ul>
</li>
</ul>
</li>
<li style="line-height: 160%; box-sizing: content-box; position: relative;">开发依赖devDependencies：
<ul style="line-height: 160%; box-sizing: content-box; display: block; list-style-type: disc; padding-left: 30px; margin: 6px 0 10px; color: #333; margin-top: 0; margin-bottom: 0;">
<li style="line-height: 160%; box-sizing: content-box; position: relative;">开发时的依赖。里面的模块是开发时用的，发布时用不到它。 --save-dev || -D
<ul style="line-height: 160%; box-sizing: content-box; display: block; list-style-type: disc; padding-left: 30px; margin: 6px 0 10px; color: #333; margin-top: 0; margin-bottom: 0;">
<li style="line-height: 160%; box-sizing: content-box; position: relative;">gulp</li>
</ul>
</li>
</ul>
</li>
<li style="line-height: 160%; box-sizing: content-box; position: relative;">安装到项目环境
<ul style="line-height: 160%; box-sizing: content-box; display: block; list-style-type: disc; padding-left: 30px; margin: 6px 0 10px; color: #333; margin-top: 0; margin-bottom: 0;">
<li style="line-height: 160%; box-sizing: content-box; position: relative;">npm install 包名 -S</li>
<li style="line-height: 160%; box-sizing: content-box; position: relative;">npm install 包名 -D</li>
</ul>
</li>
</ul>
</li>
<li style="line-height: 160%; box-sizing: content-box;">
<p style="line-height: 160%; box-sizing: content-box; margin: 10px 0; color: #333;">查看已安装:</p>
<ul style="line-height: 160%; box-sizing: content-box; display: block; list-style-type: disc; padding-left: 30px; margin: 6px 0 10px; color: #333; margin-top: 0; margin-bottom: 0;">
<li style="line-height: 160%; box-sizing: content-box; position: relative;">列出所有已装包
<ul style="line-height: 160%; box-sizing: content-box; display: block; list-style-type: disc; padding-left: 30px; margin: 6px 0 10px; color: #333; margin-top: 0; margin-bottom: 0;">
<li style="line-height: 160%; box-sizing: content-box; position: relative;">npm list</li>
</ul>
</li>
<li style="line-height: 160%; box-sizing: content-box; position: relative;">版本对比(安装过得包)
<ul style="line-height: 160%; box-sizing: content-box; display: block; list-style-type: disc; padding-left: 30px; margin: 6px 0 10px; color: #333; margin-top: 0; margin-bottom: 0;">
<li style="line-height: 160%; box-sizing: content-box; position: relative;">npm outdated</li>
</ul>
</li>
<li style="line-height: 160%; box-sizing: content-box; position: relative;">查看当前包概要信息
<ul style="line-height: 160%; box-sizing: content-box; display: block; list-style-type: disc; padding-left: 30px; margin: 6px 0 10px; color: #333; margin-top: 0; margin-bottom: 0;">
<li style="line-height: 160%; box-sizing: content-box; position: relative;">npm info 包名</li>
</ul>
</li>
<li style="line-height: 160%; box-sizing: content-box; position: relative;">查看包历史版本列表
<ul style="line-height: 160%; box-sizing: content-box; display: block; list-style-type: disc; padding-left: 30px; margin: 6px 0 10px; color: #333; margin-top: 0; margin-bottom: 0;">
<li style="line-height: 160%; box-sizing: content-box; position: relative;">npm view 包名 versions</li>
</ul>
</li>
</ul>
</li>
</ol>
</li>
<li style="line-height: 160%; box-sizing: content-box;">
<p style="line-height: 160%; box-sizing: content-box; margin: 10px 0; color: #333;">管理模块(项目):</p>
<ul style="line-height: 160%; box-sizing: content-box; display: block; list-style-type: disc; padding-left: 30px; margin: 6px 0 10px; color: #333; margin-top: 0; margin-bottom: 0;">
<li style="line-height: 160%; box-sizing: content-box; position: relative;">
<p style="line-height: 160%; box-sizing: content-box; color: #333; margin: 0;">package.json的name的名字需要和项目目录名一致，不要和依赖的包重名</p>
</li>
<li style="line-height: 160%; box-sizing: content-box; position: relative;">
<p style="line-height: 160%; box-sizing: content-box; color: #333; margin: 0;">初始化npm管理文件(package.json)</p>
<ul style="line-height: 160%; box-sizing: content-box; display: block; list-style-type: disc; padding-left: 30px; margin: 6px 0 10px; color: #333; margin-top: 0; margin-bottom: 0;">
<li style="line-height: 160%; box-sizing: content-box; position: relative;"><code style="line-height: 160%; box-sizing: content-box; border: 0; border-radius: 0; color: #c1788b; padding: 4px 4px 2px 0; letter-spacing: -.3px;">npm init</code></li>
</ul>
<pre style="line-height: 160%; box-sizing: content-box; border: 0; border-radius: 0; margin: 2px 0 8px; background-color: #f5f7f8;"><code style="display: block; overflow-x: auto; background: #1e1e1e; line-height: 160%; box-sizing: content-box; border: 0; border-radius: 0; letter-spacing: -.3px; padding: 18px; color: #f4f4f4; white-space: pre-wrap;">{
    &quot;name&quot;: &quot;npm&quot;,          // 项目名称
    &quot;version&quot;: &quot;0.0.1&quot;,     // 版本
    &quot;description&quot;: &quot;test and play&quot;,     // 描述
    &quot;main&quot;: &quot;index.js&quot;,     // 入口文件
    &quot;dependencies&quot;: {       // 项目依赖  上线也要用
        &quot;jquery&quot;: &quot;^3.2.1&quot;,
        &quot;express&quot;: &quot;^4.17.1&quot;
    },
    &quot;devDependencies&quot;: {    // 开发依赖  上线就不用
        &quot;animate.css&quot;: &quot;^3.5.2&quot;
    },
    &quot;scripts&quot;: {            // 命令行
        &quot;test&quot;: &quot;命令行&quot;,
    },
    &quot;repository&quot;: {         // 仓库信息
        &quot;type&quot;: &quot;git&quot;,
        &quot;url&quot;: &quot;https://gitee.com/liyangyf/hammer.git&quot;
    },
    &quot;keywords&quot;: [           // 关键词
        &quot;test&quot;,'xx','oo'
    ],
    &quot;author&quot;: &quot;潜水的旱鸭子&quot;, // 作者
    &quot;license&quot;: &quot;ISC&quot;,       // 认证
    &quot;homepage&quot;: &quot;https://gitee.com/liyangyf/hammer.git&quot;
}
</code></pre>
</li>
<li style="line-height: 160%; box-sizing: content-box; position: relative;">
<p style="line-height: 160%; box-sizing: content-box; color: #333; margin: 0;">安装到项目依赖   以后上线仍然需要的包</p>
<ul style="line-height: 160%; box-sizing: content-box; display: block; list-style-type: disc; padding-left: 30px; margin: 6px 0 10px; color: #333; margin-top: 0; margin-bottom: 0;">
<li style="line-height: 160%; box-sizing: content-box; position: relative;"><code style="line-height: 160%; box-sizing: content-box; border: 0; border-radius: 0; color: #c1788b; padding: 4px 4px 2px 0; letter-spacing: -.3px;">npm install 包名 --save | -S</code></li>
</ul>
</li>
<li style="line-height: 160%; box-sizing: content-box; position: relative;">
<p style="line-height: 160%; box-sizing: content-box; color: #333; margin: 0;">安装到开发依赖   上线后不需要的包</p>
<ul style="line-height: 160%; box-sizing: content-box; display: block; list-style-type: disc; padding-left: 30px; margin: 6px 0 10px; color: #333; margin-top: 0; margin-bottom: 0;">
<li style="line-height: 160%; box-sizing: content-box; position: relative;"><code style="line-height: 160%; box-sizing: content-box; border: 0; border-radius: 0; color: #c1788b; padding: 4px 4px 2px 0; letter-spacing: -.3px;">npm install 包名 --save-dev | -D</code></li>
</ul>
</li>
<li style="line-height: 160%; box-sizing: content-box; position: relative;">
<p style="line-height: 160%; box-sizing: content-box; color: #333; margin: 0;">安装package.json里面指定的所有包</p>
<ul style="line-height: 160%; box-sizing: content-box; display: block; list-style-type: disc; padding-left: 30px; margin: 6px 0 10px; color: #333; margin-top: 0; margin-bottom: 0;">
<li style="line-height: 160%; box-sizing: content-box; position: relative;"><code style="line-height: 160%; box-sizing: content-box; border: 0; border-radius: 0; color: #c1788b; padding: 4px 4px 2px 0; letter-spacing: -.3px;">npm install</code></li>
</ul>
</li>
<li style="line-height: 160%; box-sizing: content-box; position: relative;">
<p style="line-height: 160%; box-sizing: content-box; color: #333; margin: 0;">版本约束：</p>
<ul style="line-height: 160%; box-sizing: content-box; display: block; list-style-type: disc; padding-left: 30px; margin: 6px 0 10px; color: #333; margin-top: 0; margin-bottom: 0;">
<li style="line-height: 160%; box-sizing: content-box; position: relative;"><code style="line-height: 160%; box-sizing: content-box; border: 0; border-radius: 0; color: #c1788b; padding: 4px 4px 2px 0; letter-spacing: -.3px;">^x.x.x</code>      约束主版本，后续找最新</li>
<li style="line-height: 160%; box-sizing: content-box; position: relative;"><code style="line-height: 160%; box-sizing: content-box; border: 0; border-radius: 0; color: #c1788b; padding: 4px 4px 2px 0; letter-spacing: -.3px;">~x.x.x</code>      保持前两位不变，后续找最新</li>
<li style="line-height: 160%; box-sizing: content-box; position: relative;"><code style="line-height: 160%; box-sizing: content-box; border: 0; border-radius: 0; color: #c1788b; padding: 4px 4px 2px 0; letter-spacing: -.3px;">*</code>           装最新</li>
<li style="line-height: 160%; box-sizing: content-box; position: relative;"><code style="line-height: 160%; box-sizing: content-box; border: 0; border-radius: 0; color: #c1788b; padding: 4px 4px 2px 0; letter-spacing: -.3px;">x.x.x</code>       指定一个版本</li>
</ul>
</li>
<li style="line-height: 160%; box-sizing: content-box; position: relative;">
<p style="line-height: 160%; box-sizing: content-box; color: #333; margin: 0;">管理下载源工具</p>
<ul style="line-height: 160%; box-sizing: content-box; display: block; list-style-type: disc; padding-left: 30px; margin: 6px 0 10px; color: #333; margin-top: 0; margin-bottom: 0;">
<li style="line-height: 160%; box-sizing: content-box; position: relative;">安装选择源的工具包：npm install nrm -g</li>
<li style="line-height: 160%; box-sizing: content-box; position: relative;">查看所有源：nrm ls</li>
<li style="line-height: 160%; box-sizing: content-box; position: relative;">测试所有源：nrm test</li>
<li style="line-height: 160%; box-sizing: content-box; position: relative;">切换源：nrm use 源名</li>
</ul>
</li>
<li style="line-height: 160%; box-sizing: content-box; position: relative;">
<p style="line-height: 160%; box-sizing: content-box; color: #333; margin: 0;">模块下载，卡顿超过5分钟 | 报错</p>
<ul style="line-height: 160%; box-sizing: content-box; display: block; list-style-type: disc; padding-left: 30px; margin: 6px 0 10px; color: #333; margin-top: 0; margin-bottom: 0;">
<li style="line-height: 160%; box-sizing: content-box; position: relative;">ctrl + c -&gt; npm uninstall 包名  -&gt; npm cache clean --force(清除缓存) -&gt; 换4g网络 -&gt; npm install 包名</li>
</ul>
</li>
</ul>
</li>
<li style="line-height: 160%; box-sizing: content-box;">
<p style="line-height: 160%; box-sizing: content-box; margin: 10px 0; color: #333;">其他包管理器</p>
<ul style="line-height: 160%; box-sizing: content-box; display: block; list-style-type: disc; padding-left: 30px; margin: 6px 0 10px; color: #333; margin-top: 0; margin-bottom: 0;">
<li style="line-height: 160%; box-sizing: content-box; position: relative;">yarn ...</li>
</ul>
</li>
</ol>
<h1 style="line-height: 160%; box-sizing: content-box; font-weight: 700; font-size: 41px; border-bottom: 3px double #999; color: #000;">五、Express的安装和使用</h1>
<ol style="line-height: 160%; box-sizing: content-box; display: block; padding-left: 30px; margin: 6px 0 10px; color: #333; list-style-type: decimal;">
<li style="line-height: 160%; box-sizing: content-box;">
<p style="line-height: 160%; box-sizing: content-box; margin: 10px 0; color: #333;">介绍：</p>
<ul style="line-height: 160%; box-sizing: content-box; display: block; list-style-type: disc; padding-left: 30px; margin: 6px 0 10px; color: #333; margin-top: 0; margin-bottom: 0;">
<li style="line-height: 160%; box-sizing: content-box; position: relative;">
<p style="line-height: 160%; box-sizing: content-box; color: #333; margin: 0;"><a href="https://www.expressjs.com.cn/" style="line-height: 160%; box-sizing: content-box; text-decoration: underline; color: #5286bc;">Express</a> 是基于Node.Js平台，快速，开放，极简的Web开发框架。类似js中的jQuery。</p>
</li>
<li style="line-height: 160%; box-sizing: content-box; position: relative;">
<p style="line-height: 160%; box-sizing: content-box; color: #333; margin: 0;">是Node.Js的第三方模块，需要安装之后才能使用</p>
</li>
</ul>
</li>
<li style="line-height: 160%; box-sizing: content-box;">
<p style="line-height: 160%; box-sizing: content-box; margin: 10px 0; color: #333;">准备</p>
<ul style="line-height: 160%; box-sizing: content-box; display: block; list-style-type: disc; padding-left: 30px; margin: 6px 0 10px; color: #333; margin-top: 0; margin-bottom: 0;">
<li style="line-height: 160%; box-sizing: content-box; position: relative;">
<p style="line-height: 160%; box-sizing: content-box; color: #333; margin: 0;">首先准备好项目目录：</p>
<ul style="line-height: 160%; box-sizing: content-box; display: block; list-style-type: disc; padding-left: 30px; margin: 6px 0 10px; color: #333; margin-top: 0; margin-bottom: 0;">
<li style="line-height: 160%; box-sizing: content-box; position: relative;">新建文件夹，在当前目录下打开命令提示符，使用npm init创建项目配置文件package.json</li>
</ul>
</li>
<li style="line-height: 160%; box-sizing: content-box; position: relative;">
<p style="line-height: 160%; box-sizing: content-box; color: #333; margin: 0;"><a href="https://www.expressjs.com.cn/starter/installing.html" style="line-height: 160%; box-sizing: content-box; text-decoration: underline; color: #5286bc;">安装Express</a>：</p>
<ul style="line-height: 160%; box-sizing: content-box; display: block; list-style-type: disc; padding-left: 30px; margin: 6px 0 10px; color: #333; margin-top: 0; margin-bottom: 0;">
<li style="line-height: 160%; box-sizing: content-box; position: relative;"><code style="line-height: 160%; box-sizing: content-box; border: 0; border-radius: 0; color: #c1788b; padding: 4px 4px 2px 0; letter-spacing: -.3px;">npm install express -S</code></li>
</ul>
</li>
</ul>
</li>
<li style="line-height: 160%; box-sizing: content-box;">
<p style="line-height: 160%; box-sizing: content-box; margin: 10px 0; color: #333;"><a href="https://www.expressjs.com.cn/starter/hello-world.html" style="line-height: 160%; box-sizing: content-box; text-decoration: underline; color: #5286bc;">安装之后，需要在文件引入才能使用</a>：</p>
<ul style="line-height: 160%; box-sizing: content-box; display: block; list-style-type: disc; padding-left: 30px; margin: 6px 0 10px; color: #333; margin-top: 0; margin-bottom: 0;">
<li style="line-height: 160%; box-sizing: content-box; position: relative;">
<p style="line-height: 160%; box-sizing: content-box; color: #333; margin: 0;"><code style="line-height: 160%; box-sizing: content-box; border: 0; border-radius: 0; color: #c1788b; padding: 4px 4px 2px 0; letter-spacing: -.3px;">const express = require(&quot;express&quot;);</code></p>
<ul style="line-height: 160%; box-sizing: content-box; display: block; list-style-type: disc; padding-left: 30px; margin: 6px 0 10px; color: #333; margin-top: 0; margin-bottom: 0;">
<li style="line-height: 160%; box-sizing: content-box; position: relative;">express自身是一个函数，执行之后，拿到express对象</li>
</ul>
</li>
<li style="line-height: 160%; box-sizing: content-box; position: relative;">
<p style="line-height: 160%; box-sizing: content-box; color: #333; margin: 0;"><code style="line-height: 160%; box-sizing: content-box; border: 0; border-radius: 0; color: #c1788b; padding: 4px 4px 2px 0; letter-spacing: -.3px;">const app = express();</code></p>
<ul style="line-height: 160%; box-sizing: content-box; display: block; list-style-type: disc; padding-left: 30px; margin: 6px 0 10px; color: #333; margin-top: 0; margin-bottom: 0;">
<li style="line-height: 160%; box-sizing: content-box; position: relative;">类似于const serverObj = http.createServer()</li>
</ul>
</li>
<li style="line-height: 160%; box-sizing: content-box; position: relative;">
<p style="line-height: 160%; box-sizing: content-box; color: #333; margin: 0;"><code style="line-height: 160%; box-sizing: content-box; border: 0; border-radius: 0; color: #c1788b; padding: 4px 4px 2px 0; letter-spacing: -.3px;">app.listen(端口,()=&gt;{})</code></p>
<ul style="line-height: 160%; box-sizing: content-box; display: block; list-style-type: disc; padding-left: 30px; margin: 6px 0 10px; color: #333; margin-top: 0; margin-bottom: 0;">
<li style="line-height: 160%; box-sizing: content-box; position: relative;">开启指定端口的监听，开启成功后执行回调函数</li>
<li style="line-height: 160%; box-sizing: content-box; position: relative;">类似于serverObj.listen(端口,()=&gt;{})</li>
</ul>
</li>
</ul>
</li>
<li style="line-height: 160%; box-sizing: content-box;">
<p style="line-height: 160%; box-sizing: content-box; margin: 10px 0; color: #333;">express基础使用:</p>
<ul style="line-height: 160%; box-sizing: content-box; display: block; list-style-type: disc; padding-left: 30px; margin: 6px 0 10px; color: #333; margin-top: 0; margin-bottom: 0;">
<li style="line-height: 160%; box-sizing: content-box; position: relative;"><code style="line-height: 160%; box-sizing: content-box; border: 0; border-radius: 0; color: #c1788b; padding: 4px 4px 2px 0; letter-spacing: -.3px;">app.use(路径,(req,res)=&gt;{});</code>
<ul style="line-height: 160%; box-sizing: content-box; display: block; list-style-type: disc; padding-left: 30px; margin: 6px 0 10px; color: #333; margin-top: 0; margin-bottom: 0;">
<li style="line-height: 160%; box-sizing: content-box; position: relative;">当接收到指定请求路径之后，执行对应的回调函数</li>
</ul>
</li>
<li style="line-height: 160%; box-sizing: content-box; position: relative;"><code style="line-height: 160%; box-sizing: content-box; border: 0; border-radius: 0; color: #c1788b; padding: 4px 4px 2px 0; letter-spacing: -.3px;">app.get(路径,(req,res)=&gt;{});</code>
<ul style="line-height: 160%; box-sizing: content-box; display: block; list-style-type: disc; padding-left: 30px; margin: 6px 0 10px; color: #333; margin-top: 0; margin-bottom: 0;">
<li style="line-height: 160%; box-sizing: content-box; position: relative;">只能接收指定请求路径的get请求，执行对应的回调函数</li>
</ul>
</li>
<li style="line-height: 160%; box-sizing: content-box; position: relative;"><code style="line-height: 160%; box-sizing: content-box; border: 0; border-radius: 0; color: #c1788b; padding: 4px 4px 2px 0; letter-spacing: -.3px;">app.post(路径,(req,res)=&gt;{});</code>
<ul style="line-height: 160%; box-sizing: content-box; display: block; list-style-type: disc; padding-left: 30px; margin: 6px 0 10px; color: #333; margin-top: 0; margin-bottom: 0;">
<li style="line-height: 160%; box-sizing: content-box; position: relative;">只能接收指定请求路径的post请求，执行对应的回调函数</li>
</ul>
</li>
</ul>
</li>
<li style="line-height: 160%; box-sizing: content-box;">
<p style="line-height: 160%; box-sizing: content-box; margin: 10px 0; color: #333;">express对相应请求的方法内的req和res对象做了增强：</p>
<ul style="line-height: 160%; box-sizing: content-box; display: block; list-style-type: disc; padding-left: 30px; margin: 6px 0 10px; color: #333; margin-top: 0; margin-bottom: 0;">
<li style="line-height: 160%; box-sizing: content-box; position: relative;">req表示前端到后台的信息</li>
<li style="line-height: 160%; box-sizing: content-box; position: relative;">res表示后台到前端的信息</li>
<li style="line-height: 160%; box-sizing: content-box; position: relative;">保留了原有属性和方法：如req.url/res.write/res.end</li>
<li style="line-height: 160%; box-sizing: content-box; position: relative;">增加了：
<ul style="line-height: 160%; box-sizing: content-box; display: block; list-style-type: disc; padding-left: 30px; margin: 6px 0 10px; color: #333; margin-top: 0; margin-bottom: 0;">
<li style="line-height: 160%; box-sizing: content-box; position: relative;"><code style="line-height: 160%; box-sizing: content-box; border: 0; border-radius: 0; color: #c1788b; padding: 4px 4px 2px 0; letter-spacing: -.3px;">res.send()</code>
<ul style="line-height: 160%; box-sizing: content-box; display: block; list-style-type: disc; padding-left: 30px; margin: 6px 0 10px; color: #333; margin-top: 0; margin-bottom: 0;">
<li style="line-height: 160%; box-sizing: content-box; position: relative;">返回数据并结束请求</li>
</ul>
</li>
<li style="line-height: 160%; box-sizing: content-box; position: relative;"><code style="line-height: 160%; box-sizing: content-box; border: 0; border-radius: 0; color: #c1788b; padding: 4px 4px 2px 0; letter-spacing: -.3px;">req.query</code>
<ul style="line-height: 160%; box-sizing: content-box; display: block; list-style-type: disc; padding-left: 30px; margin: 6px 0 10px; color: #333; margin-top: 0; margin-bottom: 0;">
<li style="line-height: 160%; box-sizing: content-box; position: relative;">接收get数据，对象类型</li>
</ul>
</li>
<li style="line-height: 160%; box-sizing: content-box; position: relative;"><code style="line-height: 160%; box-sizing: content-box; border: 0; border-radius: 0; color: #c1788b; padding: 4px 4px 2px 0; letter-spacing: -.3px;">req.body</code>
<ul style="line-height: 160%; box-sizing: content-box; display: block; list-style-type: disc; padding-left: 30px; margin: 6px 0 10px; color: #333; margin-top: 0; margin-bottom: 0;">
<li style="line-height: 160%; box-sizing: content-box; position: relative;">接收post数据，对象类型（需要使用中间件body-parser解析）</li>
</ul>
</li>
<li style="line-height: 160%; box-sizing: content-box; position: relative;"><code style="line-height: 160%; box-sizing: content-box; border: 0; border-radius: 0; color: #c1788b; padding: 4px 4px 2px 0; letter-spacing: -.3px;">req.method</code>
<ul style="line-height: 160%; box-sizing: content-box; display: block; list-style-type: disc; padding-left: 30px; margin: 6px 0 10px; color: #333; margin-top: 0; margin-bottom: 0;">
<li style="line-height: 160%; box-sizing: content-box; position: relative;">查看当前请求方式，get/post</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li style="line-height: 160%; box-sizing: content-box;">
<p style="line-height: 160%; box-sizing: content-box; margin: 10px 0; color: #333;">express的特点就是对原生NodeJs做了二次封装，非侵入式。同时某些功能需要配合中间件使用。</p>
</li>
</ol>
<h1 style="line-height: 160%; box-sizing: content-box; font-weight: 700; font-size: 41px; border-bottom: 3px double #999; color: #000;">六、什么是中间件</h1>
<ol style="line-height: 160%; box-sizing: content-box; display: block; padding-left: 30px; margin: 6px 0 10px; color: #333; list-style-type: decimal;">
<li style="line-height: 160%; box-sizing: content-box;">
<p style="line-height: 160%; box-sizing: content-box; margin: 10px 0; color: #333;">express是一个路由和中间件Web框架，其自身的功能很少：express应用程序本质上是对一系列中间件函数调用。</p>
</li>
<li style="line-height: 160%; box-sizing: content-box;">
<p style="line-height: 160%; box-sizing: content-box; margin: 10px 0; color: #333;">简单的说，中间件，就是封装好的函数，类似于jq的插件，express自身的功能很少，一些功能的实现，都是通过中间件，来完成。</p>
</li>
<li style="line-height: 160%; box-sizing: content-box;">
<p style="line-height: 160%; box-sizing: content-box; margin: 10px 0; color: #333;">express中间件的使用：</p>
<ul style="line-height: 160%; box-sizing: content-box; display: block; list-style-type: disc; padding-left: 30px; margin: 6px 0 10px; color: #333; margin-top: 0; margin-bottom: 0;">
<li style="line-height: 160%; box-sizing: content-box; position: relative;">
<p style="line-height: 160%; box-sizing: content-box; color: #333; margin: 0;">body-parser中间件：</p>
<ul style="line-height: 160%; box-sizing: content-box; display: block; list-style-type: disc; padding-left: 30px; margin: 6px 0 10px; color: #333; margin-top: 0; margin-bottom: 0;">
<li style="line-height: 160%; box-sizing: content-box; position: relative;">下载中间件：（解析post数据）
<ul style="line-height: 160%; box-sizing: content-box; display: block; list-style-type: disc; padding-left: 30px; margin: 6px 0 10px; color: #333; margin-top: 0; margin-bottom: 0;">
<li style="line-height: 160%; box-sizing: content-box; position: relative;"><code style="line-height: 160%; box-sizing: content-box; border: 0; border-radius: 0; color: #c1788b; padding: 4px 4px 2px 0; letter-spacing: -.3px;">npm install body-parser</code></li>
</ul>
</li>
<li style="line-height: 160%; box-sizing: content-box; position: relative;">引入中间件
<ul style="line-height: 160%; box-sizing: content-box; display: block; list-style-type: disc; padding-left: 30px; margin: 6px 0 10px; color: #333; margin-top: 0; margin-bottom: 0;">
<li style="line-height: 160%; box-sizing: content-box; position: relative;"><code style="line-height: 160%; box-sizing: content-box; border: 0; border-radius: 0; color: #c1788b; padding: 4px 4px 2px 0; letter-spacing: -.3px;">const bodyParser = require(&quot;body-parser&quot;);</code></li>
</ul>
</li>
<li style="line-height: 160%; box-sizing: content-box; position: relative;">使用并将中间件绑定到express的app对象
<ul style="line-height: 160%; box-sizing: content-box; display: block; list-style-type: disc; padding-left: 30px; margin: 6px 0 10px; color: #333; margin-top: 0; margin-bottom: 0;">
<li style="line-height: 160%; box-sizing: content-box; position: relative;"><code style="line-height: 160%; box-sizing: content-box; border: 0; border-radius: 0; color: #c1788b; padding: 4px 4px 2px 0; letter-spacing: -.3px;">app.use(bodyParser())</code></li>
</ul>
</li>
</ul>
</li>
<li style="line-height: 160%; box-sizing: content-box; position: relative;">
<p style="line-height: 160%; box-sizing: content-box; color: #333; margin: 0;">express自带的中间件：static（静态文件托管）</p>
<ul style="line-height: 160%; box-sizing: content-box; display: block; list-style-type: disc; padding-left: 30px; margin: 6px 0 10px; color: #333; margin-top: 0; margin-bottom: 0;">
<li style="line-height: 160%; box-sizing: content-box; position: relative;">使用并将中间件绑定到express的app对象
<ul style="line-height: 160%; box-sizing: content-box; display: block; list-style-type: disc; padding-left: 30px; margin: 6px 0 10px; color: #333; margin-top: 0; margin-bottom: 0;">
<li style="line-height: 160%; box-sizing: content-box; position: relative;"><code style="line-height: 160%; box-sizing: content-box; border: 0; border-radius: 0; color: #c1788b; padding: 4px 4px 2px 0; letter-spacing: -.3px;">app.use(express.static('./www'));</code></li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li style="line-height: 160%; box-sizing: content-box;">
<p style="line-height: 160%; box-sizing: content-box; margin: 10px 0; color: #333;">中间件就是一个函数或对象，封装了express的功能，相对于express来说，是整个流水线上的一环。</p>
</li>
</ol>
<h1 style="line-height: 160%; box-sizing: content-box; font-weight: 700; font-size: 41px; border-bottom: 3px double #999; color: #000;">七、express的路由介绍</h1>
<ol style="line-height: 160%; box-sizing: content-box; display: block; padding-left: 30px; margin: 6px 0 10px; color: #333; list-style-type: decimal;">
<li style="line-height: 160%; box-sizing: content-box;">
<p style="line-height: 160%; box-sizing: content-box; margin: 10px 0; color: #333;">路由是指，确定应用程序，如何响应对特定端点的客户端请求，该特定端点是URI（或路径）和特定的HTTP请求方法（GET，POST等）。</p>
</li>
<li style="line-height: 160%; box-sizing: content-box;">
<p style="line-height: 160%; box-sizing: content-box; margin: 10px 0; color: #333;">每个路由可以具有一个或多个处理函数，这些函数在匹配该路由时执行。</p>
</li>
<li style="line-height: 160%; box-sizing: content-box;">
<p style="line-height: 160%; box-sizing: content-box; margin: 10px 0; color: #333;">express的路径设置语法：</p>
<ul style="line-height: 160%; box-sizing: content-box; display: block; list-style-type: disc; padding-left: 30px; margin: 6px 0 10px; color: #333; margin-top: 0; margin-bottom: 0;">
<li style="line-height: 160%; box-sizing: content-box; position: relative;"><code style="line-height: 160%; box-sizing: content-box; border: 0; border-radius: 0; color: #c1788b; padding: 4px 4px 2px 0; letter-spacing: -.3px;">app.METHOD(PATH, HANDLER)</code>
<ul style="line-height: 160%; box-sizing: content-box; display: block; list-style-type: disc; padding-left: 30px; margin: 6px 0 10px; color: #333; margin-top: 0; margin-bottom: 0;">
<li style="line-height: 160%; box-sizing: content-box; position: relative;">app是express的模块对象</li>
<li style="line-height: 160%; box-sizing: content-box; position: relative;">METHOD是小写的请求方式</li>
<li style="line-height: 160%; box-sizing: content-box; position: relative;">PATH是服务器上的路径</li>
<li style="line-height: 160%; box-sizing: content-box; position: relative;">HANDLER是匹配路径时执行的功能</li>
</ul>
</li>
</ul>
</li>
<li style="line-height: 160%; box-sizing: content-box;">
<p style="line-height: 160%; box-sizing: content-box; margin: 10px 0; color: #333;">如：</p>
</li>
</ol>
<pre style="line-height: 160%; box-sizing: content-box; border: 0; border-radius: 0; margin: 2px 0 8px; background-color: #f5f7f8;"><code style="display: block; overflow-x: auto; background: #1e1e1e; line-height: 160%; box-sizing: content-box; border: 0; border-radius: 0; letter-spacing: -.3px; padding: 18px; color: #f4f4f4; white-space: pre-wrap;">    app.get(<span style="color: #d69d85; line-height: 160%; box-sizing: content-box;">'/'</span>, <span style="color: #dcdcdc; line-height: 160%; box-sizing: content-box;"><span style="color: #569cd6; line-height: 160%; box-sizing: content-box;">function</span> (<span style="color: #dcdcdc; line-height: 160%; box-sizing: content-box;">req, res</span>) </span>{
        res.send(<span style="color: #d69d85; line-height: 160%; box-sizing: content-box;">'this is GET request'</span>)
    })

    app.post(<span style="color: #d69d85; line-height: 160%; box-sizing: content-box;">'/'</span>, <span style="color: #dcdcdc; line-height: 160%; box-sizing: content-box;"><span style="color: #569cd6; line-height: 160%; box-sizing: content-box;">function</span> (<span style="color: #dcdcdc; line-height: 160%; box-sizing: content-box;">req, res</span>) </span>{
        res.send(<span style="color: #d69d85; line-height: 160%; box-sizing: content-box;">'this is POST request'</span>)
    })
</code></pre>
<h1 style="line-height: 160%; box-sizing: content-box; font-weight: 700; font-size: 41px; border-bottom: 3px double #999; color: #000;">八、项目的开发方式</h1>
<ol style="line-height: 160%; box-sizing: content-box; display: block; padding-left: 30px; margin: 6px 0 10px; color: #333; list-style-type: decimal;">
<li style="line-height: 160%; box-sizing: content-box;">
<p style="line-height: 160%; box-sizing: content-box; margin: 10px 0; color: #333;">前后端分离的项目</p>
<ul style="line-height: 160%; box-sizing: content-box; display: block; list-style-type: disc; padding-left: 30px; margin: 6px 0 10px; color: #333; margin-top: 0; margin-bottom: 0;">
<li style="line-height: 160%; box-sizing: content-box; position: relative;">前端：页面渲染</li>
<li style="line-height: 160%; box-sizing: content-box; position: relative;">数据请求工具：form，ajax，......</li>
<li style="line-height: 160%; box-sizing: content-box; position: relative;">后端：数据处理</li>
<li style="line-height: 160%; box-sizing: content-box; position: relative;">后端管理数据库，处理数据，将数据处理成json后，通过媒介发给前端，前端接收到后端的数据，处理之后，渲染到前端页面</li>
<li style="line-height: 160%; box-sizing: content-box; position: relative;">前后端可以同时开发</li>
</ul>
</li>
<li style="line-height: 160%; box-sizing: content-box;">
<p style="line-height: 160%; box-sizing: content-box; margin: 10px 0; color: #333;">前后端不分离的项目</p>
<ul style="line-height: 160%; box-sizing: content-box; display: block; list-style-type: disc; padding-left: 30px; margin: 6px 0 10px; color: #333; margin-top: 0; margin-bottom: 0;">
<li style="line-height: 160%; box-sizing: content-box; position: relative;">前端：静态页</li>
<li style="line-height: 160%; box-sizing: content-box; position: relative;">后端：数据处理，将前端的静态页改成页面模版后，渲染</li>
<li style="line-height: 160%; box-sizing: content-box; position: relative;">前端先将静态页准备好，发（U盘，QQ，仓库共享）给后端，后端将前端页面改成页面模版，后端再去请求数据，处理数据，将数据渲染到模版，将模版渲染到浏览器</li>
</ul>
</li>
<li style="line-height: 160%; box-sizing: content-box;">
<p style="line-height: 160%; box-sizing: content-box; margin: 10px 0; color: #333;">node的后台管理项目：前后端不分离的开发方式</p>
</li>
<li style="line-height: 160%; box-sizing: content-box;">
<p style="line-height: 160%; box-sizing: content-box; margin: 10px 0; color: #333;">页面模版是什么：在静态页中插入后端的数据变量，逻辑语句，通过后端程序执行，得到真实的页面</p>
</li>
</ol>
<h1 style="line-height: 160%; box-sizing: content-box; font-weight: 700; font-size: 41px; border-bottom: 3px double #999; color: #000;">作业：</h1>
<ol style="line-height: 160%; box-sizing: content-box; display: block; padding-left: 30px; margin: 6px 0 10px; color: #333; list-style-type: decimal;">
<li style="line-height: 160%; box-sizing: content-box;">包管理</li>
<li style="line-height: 160%; box-sizing: content-box;">promise</li>
<li style="line-height: 160%; box-sizing: content-box;">静态资源+ajax请求的node服务器</li>
<li style="line-height: 160%; box-sizing: content-box;">静态资源+ajax请求的express服务器</li>
</ol>
<h1 style="line-height: 160%; box-sizing: content-box; font-weight: 700; font-size: 41px; border-bottom: 3px double #999; color: #000;">加油！！！</h1>
</div><center style="display:none !important;visibility:collapse !important;height:0 !important;white-space:nowrap;width:100%;overflow:hidden">%5Btoc%5D%0A%23%20%E4%B8%80%E3%80%81node%E5%9F%BA%E7%A1%80%0A1.%20%E4%BB%8B%E7%BB%8D%0A%20%20%20%20-%20%E4%BD%9C%E7%94%A8%EF%BC%9A%E7%94%A8%E6%9D%A5%E5%AE%9E%E7%8E%B0%E5%90%8E%E5%8F%B0%E7%AE%A1%E7%90%86%E7%A8%8B%E5%BA%8F%0A%20%20%20%20-%20%E7%9B%AE%E7%9A%84%EF%BC%9A%E6%95%B0%E6%8D%AE%E6%9C%8D%E5%8A%A1%EF%BC%8C%E6%96%87%E4%BB%B6%E6%9C%8D%E5%8A%A1%EF%BC%8Cweb%E6%9C%8D%E5%8A%A1%0A%20%20%20%20-%20%E7%B1%BB%E4%BC%BC%EF%BC%9Aphp%EF%BC%8C.net%EF%BC%8Cjava(jsp)%20....%0A%20%20%20%20-%20%E7%94%B1%20c%2B%2B%20%E7%BC%96%E5%86%99%0A2.%20%E4%BC%98%E5%8A%BF%EF%BC%9A%0A%20%20%20%20-%20%E6%80%A7%E8%83%BD%E9%AB%98%EF%BC%8C%E6%96%B9%E4%BE%BF%EF%BC%8C%E5%85%A5%E9%97%A8%E9%9A%BE%0A%20%20%20%20-%20%E8%83%BD%E7%94%A8%E7%9A%84%E4%B8%8A%E7%9A%84%E5%AD%A6%E4%B9%A0%E8%B5%84%E6%96%99%E5%B0%91%EF%BC%8C%E5%AF%B9%E7%A8%8B%E5%BA%8F%E5%91%98%E7%9A%84%E8%A6%81%E6%B1%82%E9%AB%98%EF%BC%8C%E5%A4%A7%E5%85%AC%E5%8F%B8%E9%83%BD%E5%9C%A8%E7%94%A8%EF%BC%88BAT%EF%BC%89%0A3.%20%E7%8E%AF%E5%A2%83%EF%BC%9Anodejs%20%2B%20web%E6%9C%8D%E5%8A%A1%E5%99%A8%20%2B%20%E6%95%B0%E6%8D%AE%E5%BA%93%0A%20%20%20%20-%20%E5%AE%98%E7%BD%91%EF%BC%9A%5Bhttps%3A%2F%2Fnodejs.org%2Fzh-cn%2F%5D(https%3A%2F%2Fnodejs.org%2Fzh-cn%2F)%0A%20%20%20%20-%20%E6%B5%8B%E8%AF%95%E7%8E%AF%E5%A2%83%EF%BC%9A%20%E5%91%BD%E4%BB%A4%E8%A1%8C(%E8%BF%90%E8%A1%8C-%3Ecmd)-%3Enode%20-v%0A4.%20%E5%8A%A3%E5%8A%BF%EF%BC%9A%0A%20%20%20%20-%20%E6%9C%8D%E5%8A%A1%E5%99%A8%E6%8F%90%E4%BE%9B%E7%9A%84%E7%9B%B8%E5%AF%B9%E8%BE%83%E5%B0%91%20%5Bhttp%3A%2F%2Fnodejs.cn%2F%5D(http%3A%2F%2Fnodejs.cn%2F)%0A5.%20%E7%89%88%E6%9C%AC%E4%BB%8B%E7%BB%8D%EF%BC%9A%0A%20%20%20%20-%20Vx(%E4%B8%BB).x(%E5%AD%90).x%EF%BC%88%E4%BF%AE%E6%AD%A3%EF%BC%89%0A%20%20%20%20-%20%E4%B8%BB%EF%BC%9A1%2F3%E7%9A%84API%E5%8F%91%E7%94%9F%E5%B7%A8%E5%8F%98%EF%BC%8C%E4%BD%BF%E7%94%A8%E6%96%B9%E5%BC%8F%E5%8F%98%E5%8C%96%E4%BA%86%0A%20%20%20%20-%20%E5%AD%90%EF%BC%9AAPI%E6%B2%A1%E6%9C%89%E5%88%A0%E5%87%8F%EF%BC%8C%E4%BD%BF%E7%94%A8%E6%96%B9%E5%BC%8F%E6%B2%A1%E5%8F%98%E5%8C%96%EF%BC%8C%E5%86%85%E9%83%A8%E5%AE%9E%E7%8E%B0%E5%8F%91%E7%94%9F%E4%BA%86%E5%8F%98%E5%8C%96%0A%20%20%20%20-%20%E4%BF%AE%E6%AD%A3%E7%89%88%EF%BC%9A%E4%BB%80%E4%B9%88%E9%83%BD%E6%B2%A1%E5%8F%98%EF%BC%8C%E5%A4%84%E7%90%86%E4%B8%80%E4%B8%8Bbug%0A%20%20%20%20%20%20%20%20-%20V6.8.x%20%E7%A8%B3%E5%AE%9A%0A%20%20%20%20%20%20%20%20-%20V6.9.x%20%E9%9D%9E%E7%A8%B3%E5%AE%9A%E7%89%88%0A%20%20%20%20%20%20%20%20-%20Vx.x.x-beta%20%E6%B5%8B%E8%AF%95%0A%20%20%20%20%20%20%20%20-%20vx.x.x-rc%20%E6%B5%8B%E8%AF%95%E7%A8%B3%E5%AE%9A%0A%20%20%20%20%20%20%20%20-%20vx.x.x-alpha%20%E6%B5%8B%E8%AF%95%E7%A8%B3%E5%AE%9A%0A6.%20%E8%BF%90%E8%A1%8C%EF%BC%9A%0A%20%20%20%20-%20DOS%E5%91%BD%E4%BB%A4%EF%BC%88%E5%B0%8F%E9%BB%91%E6%A1%86%EF%BC%89%3A%0A%20%20%20%20%20%20%20%20-%20win%2Br%20-%3E%20cmd%E5%9B%9E%E8%BD%A6%20-%3E%20cd%20%E7%9B%AE%E5%BD%95%20-%3E%20node%20%E6%96%87%E4%BB%B6%E5%90%8D.js%20%7C%20node%20%E6%96%87%E4%BB%B6%E5%90%8D%0A%20%20%20%20%20%20%20%20-%20vscode%20-%3E%20%E7%BB%88%E7%AB%AF%0A%20%20%20%20%20%20%20%20-%20%E5%BD%93%E5%89%8D%E7%9B%AE%E5%BD%95%20-%3E%20%E5%8F%B3%E9%94%AE%20-%3E%20git%20bash%20-%3E%20node%20%E6%96%87%E4%BB%B6%E5%90%8D%0A%20%20%20%20-%20linux%2Fcentos(git)%3A%20%20%0A%20%20%20%20%20%20%20%20-%20%E7%BB%88%E7%AB%AF%20-%3E%20cd%20%E7%9B%AE%E5%BD%95%20-%3E%20node%20%E6%96%87%E4%BB%B6%E5%90%8D.js%20%7C%20node%20%E6%96%87%E4%BB%B6%E5%90%8D%0A7.%20node%E5%91%BD%E4%BB%A4%E8%A1%8C%3A%0A%20%20%20%20-%20DOS%20-%3E%20node%20%E5%9B%9E%E8%BD%A6%20-%3E%20%E7%BC%96%E5%86%99%2B%E8%BF%90%E8%A1%8C%0A%20%20%20%20-%20%E4%B8%80%E8%88%AC%E5%8F%AA%E6%98%AF%E6%B5%8B%E8%AF%95API%E7%9A%84%E5%8F%AF%E7%94%A8%E5%BA%A6%0A%0A8.%20%E6%B3%A8%E6%84%8F%EF%BC%9A%0A%20%20%20%20-%20DOM%2FBOM%20%E4%B8%8D%E5%8F%AF%E7%94%A8%0A%20%20%20%20-%20ECMA%20%E5%8F%AF%E7%94%A8%0A%0A%23%20%E4%BA%8C%E3%80%81node%E7%9A%84%E6%A8%A1%E5%9D%97%E5%8C%96%E8%A7%84%E8%8C%83%EF%BC%9AcommonJS%0A-%20commonJS%20%E6%98%AF%20nodejs%20%E9%BB%98%E8%AE%A4%E6%A8%A1%E5%9D%97%E7%AE%A1%E7%90%86%E6%96%B9%E5%BC%8F%2C%E4%B8%8D%E6%94%AF%E6%8C%81es6%E7%9A%84%E6%A8%A1%E5%9D%97%E5%8C%96%E7%AE%A1%E7%90%86%E6%96%B9%E5%BC%8F%EF%BC%8C%E4%BD%86%E6%94%AF%E6%8C%81%E6%89%80%E6%9C%89es6%2B%E8%AF%AD%E6%B3%95%0A%0A1.%20%E6%A8%A1%E5%9D%97%E5%8C%96%E7%9A%84%E7%9B%AE%E7%9A%84%0A%20%20%20%20-%20%E6%98%AF%E4%B8%BB%E8%A6%81%E4%B8%BA%E4%BA%86JS%E5%9C%A8%E5%90%8E%E7%AB%AF%E7%9A%84%E8%A1%A8%E7%8E%B0%E5%88%B6%E5%AE%9A%0A%20%20%20%20-%20commonJS%20%E6%98%AF%E4%B8%AA%E8%A7%84%E8%8C%83%20nodejs%20%2F%20webpack%20%E6%98%AF%E4%B8%80%E4%B8%AA%E5%AE%9E%E7%8E%B0%0A%20%20%20%20-%20ECMA%20%E6%98%AF%E4%B8%AA%E8%A7%84%E8%8C%83%20%20js%20%E5%AE%9E%E7%8E%B0%E4%BA%86%0A%0A2.%20%E6%A8%A1%E5%9D%97%E5%8C%96%E6%96%B9%E5%BC%8F%0A%20%20%20%20-%20%E6%9C%8D%E5%8A%A1%E5%99%A8%E7%AB%AFJS%EF%BC%9A%E7%9B%B8%E5%90%8C%E7%9A%84%E4%BB%A3%E7%A0%81%E9%9C%80%E8%A6%81%E5%A4%9A%E6%AC%A1%E6%89%A7%E8%A1%8C%20%7C%20CPU%E5%92%8C%E5%86%85%E5%AD%98%E8%B5%84%E6%BA%90%E6%98%AF%E7%93%B6%E9%A2%88%20%7C%20%E5%8A%A0%E8%BD%BD%E6%97%B6%E4%BB%8E%E7%A3%81%E7%9B%98%E4%B8%AD%E5%8A%A0%E8%BD%BD%0A%20%20%20%20%20%20%20%20-%20node%E6%A8%A1%E5%9D%97%EF%BC%9A%20http%20%2F%20fs%20%2F%20querystring%20%2F%20url%0A%20%20%20%20%20%20%20%20-%20%E6%A8%A1%E5%9D%97%E5%8C%96%E6%96%B9%E5%BC%8F%EF%BC%9Arequire('%E6%A8%A1%E5%9D%97%E5%90%8D')%20%20%E7%B3%BB%E7%BB%9F%E6%A8%A1%E5%9D%97%0A%20%20%20%20-%20%E6%B5%8F%E8%A7%88%E5%99%A8%E7%AB%AFjs%EF%BC%9A%E4%BB%A3%E7%A0%81%E9%9C%80%E8%A6%81%E4%BB%8E%E4%B8%80%E4%B8%AA%E6%9C%8D%E5%8A%A1%E5%99%A8%E7%AB%AF%E5%88%86%E5%8F%91%E5%88%B0%E5%A4%9A%E4%B8%AA%E5%AE%A2%E6%88%B7%E7%AB%AF%E6%89%A7%E8%A1%8C%20%7C%20%E5%B8%A6%E5%AE%BD%E6%98%AF%E7%93%B6%E9%A2%88%20%7C%20%E9%80%9A%E8%BF%87%E7%BD%91%E7%BB%9C%E5%8A%A0%E8%BD%BD%0A%20%20%20%20%20%20%20%20-%20%E6%A8%A1%E5%9D%97%E5%8C%96%E6%96%B9%E5%BC%8F%EF%BC%9Arequire%E3%80%81module%E3%80%81exports%0A%20%20%20%20%20%20%20%20-%20seajs.js%20%2F%20require.js%20%20%20CMD%2FAMD%0A%0A3.%20commonJS%E6%A8%A1%E5%9D%97%E5%8C%96%E6%96%B9%E5%BC%8F%0A%20%20%20%20-%20require%20%E5%BC%95%E5%85%A5%E6%A8%A1%E5%9D%97%E3%80%81%E8%BE%93%E5%85%A5%0A%20%20%20%20%20%20%20%20-%20%60require('%E6%A8%A1%E5%9D%97%E5%90%8D')%60%0A%20%20%20%20%20%20%20%20%20%20%20%20-%20%E4%B8%8D%E6%8C%87%E5%AE%9A%E8%B7%AF%E5%BE%84%EF%BC%9A%E5%85%88%E6%89%BE%E7%B3%BB%E7%BB%9F%E6%A8%A1%E5%9D%97%20-%3E%20%E5%86%8D%E4%BB%8E%E9%A1%B9%E7%9B%AE%E7%8E%AF%E5%A2%83%E6%89%BEnode_modules%20%7C%20bower_components%20(%E4%BE%9D%E8%B5%96%E6%A8%A1%E5%9D%97)-%3E%20not%20found%0A%20%20%20%20%20%20%20%20%20%20%20%20-%20%E6%8C%87%E5%AE%9A%E8%B7%AF%E5%BE%84%EF%BC%9A%E6%8C%87%E5%AE%9A%E8%B7%AF%E5%BE%84%20-%3E%20not%20found%0A%20%20%20%20%20%20%20%20-%20require%E8%BE%93%E5%85%A5%E7%9A%84%E6%98%AF%E4%B8%80%E4%B8%AA%E5%AF%B9%E8%B1%A1%0A%0A%20%20%20%20-%20exports%20%E5%AF%BC%E5%87%BA%EF%BC%8C%E6%89%B9%E9%87%8F%E8%BE%93%E5%87%BA%EF%BC%8C%E9%83%BD%E6%98%AF%E5%B1%9E%E6%80%A7%0A%20%20%20%20%20%20%20%20-%20%60exports.%E8%87%AA%E5%AE%9A%E4%B9%89%E5%B1%9E%E6%80%A7%20%3D%20%E5%80%BC%60%0A%0A%20%20%20%20-%20module%20%E9%BB%98%E8%AE%A4%E8%BE%93%E5%87%BA%EF%BC%8C%E5%8F%AA%E8%83%BD%E8%BE%93%E5%87%BA%E4%B8%80%E6%AC%A1%EF%BC%8Crequire%E8%BE%93%E5%85%A5%E7%9A%84%E6%98%AF%E4%BB%BB%E6%84%8F%E6%8E%A5%E6%94%B6%0A%20%20%20%20%20%20%20%20-%20%60module.exports%20%3D%20%7B%20%E8%87%AA%E5%AE%9A%E4%B9%89%E5%B1%9E%E6%80%A7%EF%BC%9A%E5%80%BC%20%7D%60%0A%0A%23%20%E4%B8%89%E3%80%81node%E5%86%85%E7%BD%AE%E6%A8%A1%E5%9D%97%0A%23%23%23%20http%E6%A8%A1%E5%9D%97%0A-%20nodejs%E6%90%AD%E5%BB%BAweb%E6%9C%8D%E5%8A%A1%E5%99%A8%0A1.%20%E5%BC%95%E5%85%A5%E6%A8%A1%E5%9D%97%EF%BC%9A%60const%20http%20%3D%20require('http')%3B%60%0A%0A2.%20%E5%88%9B%E5%BB%BA%E6%9C%8D%E5%8A%A1%EF%BC%9A%0A%20%20%20%20-%20%60server%2Fapp%20%3D%20http.createServer(%E5%87%BD%E6%95%B0(req%2Cres))%3B%60%20%20%2F%2F%20%E8%BF%94%E5%9B%9Ehttp%E5%AF%B9%E8%B1%A1%0A%20%20%20%20%20%20%20%20-%20require%EF%BC%9A%E8%AF%B7%E6%B1%82%EF%BC%9A%E6%B5%8F%E8%A7%88%E5%99%A8%20-%3E%20%E6%9C%8D%E5%8A%A1%E5%99%A8%0A%20%20%20%20%20%20%20%20%20%20%20%20-%20%60req.url%60%20%20%20%20%20%E5%9C%B0%E5%9D%80%EF%BC%8C%E6%8F%90%E5%8F%96%E5%9C%B0%E5%9D%80%E6%A0%8F%E6%95%B0%E6%8D%AE%0A%20%20%20%20%20%20%20%20%20%20%20%20-%20%60req.on('data%7Cend')%3B%60%20%20%20%20%20%E6%8F%90%E5%8F%96%E9%9D%9E%E5%9C%B0%E5%9D%80%E6%A0%8F%E6%95%B0%E6%8D%AE%EF%BC%8C%E6%89%80%E6%9C%89%E7%9A%84http%5Bs%5D%E9%83%BD%E4%BC%9A%E8%A7%A6%E5%8F%91end%E4%BA%8B%E4%BB%B6%0A%20%20%20%20%20%20%20%20-%20response%EF%BC%9A%E5%93%8D%E5%BA%94%EF%BC%9A%E6%9C%8D%E5%8A%A1%E5%99%A8%20-%3E%20%E6%B5%8F%E8%A7%88%E5%99%A8%0A%20%20%20%20%20%20%20%20%20%20%20%20-%20%E5%93%8D%E5%BA%94%E5%A4%B4%E8%AE%BE%E7%BD%AE%EF%BC%9A%60res.writeHead(200%2C%7B'Content-Type'%3A'text%2Fhtml%3Bcharset%3Dutf-8'%7D)%3B%60%0A%20%20%20%20%20%20%20%20%20%20%20%20-%20%60res.write(%E5%AD%97%E7%AC%A6%2F%E6%95%B0%E6%8D%AE%3Cstring%3E%3Cbuffer%3E)%60%0A%20%20%20%20%20%20%20%20%20%20%20%20-%20%60res.end()%3B%60%20%E7%BB%93%E6%9D%9F%E5%93%8D%E5%BA%94%0A%0A3.%20%E7%9B%91%E5%90%AC%EF%BC%9A%0A%20%20%20%20-%20%60server.listen(%E7%AB%AF%E5%8F%A3%EF%BC%8C%5B%E5%9C%B0%E5%9D%80%5D%EF%BC%8C%5B%E5%9B%9E%E8%B0%83%5D)%60%0A%20%20%20%20%20%20%20%20-%20%E7%AB%AF%E5%8F%A3%EF%BC%9A1-65535%EF%BC%8C1024%E4%BB%A5%E4%B8%8B%E7%B3%BB%E7%BB%9F%E5%8D%A0%E7%94%A8%EF%BC%8C80%0A%20%20%20%20%20%20%20%20-%20%E5%9C%B0%E5%9D%80%EF%BC%9A%E8%99%9A%E6%8B%9Flocalhost%20%20%E7%9C%9F%E5%AE%9E%E5%9F%9F%E5%90%8Dxx.duapp.com%0A%20%20%20%20%20%20%20%20-%20%E5%9B%9E%E8%B0%83%EF%BC%9A%E7%9B%91%E5%90%AC%E6%88%90%E5%8A%9F%EF%BC%8C%E5%9B%9E%E8%B0%83%E4%B8%80%E6%AC%A1%0A%0A4.%20%E5%B0%8F%E6%8F%90%E7%A4%BA%EF%BC%9A%0A%20%20%20%20-%20%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%BB%A3%E7%A0%81%E6%9B%B4%E6%96%B0%E5%90%8E%EF%BC%8C%E9%9C%80%E8%A6%81%E9%87%8D%E5%90%AF%E6%9C%8D%E5%8A%A1%E5%99%A8%0A%20%20%20%20%20%20%20%20-%20%E8%87%AA%E5%8A%A8%E9%87%8D%E5%90%AF%E5%B7%A5%E5%85%B7%3A%20supervisor%20%7C%20nodemon%20%20%20%E5%91%BD%E4%BB%A4%E8%A1%8C%E5%B7%A5%E5%85%B7%0A%20%20%20%20%20%20%20%20-%20%60npm%20install%20supervisor%20-g%20%20%7C%20npm%20install%20nodemon%20-g%60%0A%20%20%20%20-%20%E6%8E%A5%E5%8F%A3%E6%B5%8B%E8%AF%95%E5%B7%A5%E5%85%B7%0A%20%20%20%20%20%20%20%20-%20postman%0A%20%20%20%20%20%20%20%20-%20insominia%0A%0A%0A%23%23%23%20%E6%96%87%E4%BB%B6%E6%9C%8D%E5%8A%A1%E6%A8%A1%E5%9D%97%20-%20file%20system%20%E6%A8%A1%E5%9D%97%0A%0A1.%20%E5%BC%95%E5%85%A5%E6%A8%A1%E5%9D%97%EF%BC%9A%60const%20fs%20%3D%20require('fs')%3B%60%0A%0A2.%20%E5%8A%9F%E8%83%BD%EF%BC%9A%E8%AF%BB%EF%BC%8C%E5%86%99%EF%BC%8C%E5%88%A0%EF%BC%8C%E6%94%B9%0A%20%20%20%20-%20%E8%AF%BB%EF%BC%9A%0A%20%20%20%20%20%20%20%201.%20%60fs.readFile('%E8%B7%AF%E5%BE%84'%2C%5B%E9%85%8D%E7%BD%AE%5D%2C%E5%9B%9E%E8%B0%83(err%2Cdata))%60%0A%20%20%20%20%20%20%20%20%20%20%20%20-%20%E6%9C%89%E5%9B%9E%E8%B0%83%EF%BC%8C%E6%98%AF%E5%BC%82%E6%AD%A5%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20-%20err%EF%BC%9A%E9%94%99%E8%AF%AF%EF%BC%8Cnull%E6%88%96%E8%80%85undefined%EF%BC%8C%E8%A1%A8%E7%A4%BA%E6%B2%A1%E6%9C%89%E9%94%99%E8%AF%AF%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20-%20ps%3A%E9%94%99%E8%AF%AF%E4%BC%98%E5%85%88%E6%9C%BA%E5%88%B6%EF%BC%8C%E5%9B%9E%E8%B0%83%E5%87%BD%E6%95%B0%E7%9A%84%E7%AC%AC%E4%B8%80%E4%B8%AA%E5%8F%82%E6%95%B0%E4%B8%BA%E9%94%99%E8%AF%AF%E4%BF%A1%E6%81%AF%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20-%20data%EF%BC%9A%E4%BA%8C%E8%BF%9B%E5%88%B6buffer%E6%B5%81%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20-%20ps%3A%E6%83%B3%E8%8E%B7%E5%BE%97%E5%8E%9F%E5%AD%97%E7%AC%A6%E4%B8%B2%E5%86%85%E5%AE%B9%E5%B0%B1%E8%A6%81%E5%8A%A0toString()%E6%96%B9%E6%B3%95%0A%20%20%20%20%20%20%20%202.%20%60let%20data%20%3D%20fs.readFileSync('%E8%B7%AF%E5%BE%84'%2C%5B%E9%85%8D%E7%BD%AE%5D)%60%0A%20%20%20%20%20%20%20%20%20%20%20%20-%20%E5%90%8C%E6%AD%A5%EF%BC%8C%E5%85%8D%E5%8E%BB%E5%9B%9E%E8%B0%83%E5%9C%B0%E7%8B%B1%EF%BC%8C%E5%B0%BD%E9%87%8F%E7%94%A8%E8%BF%99%E7%A7%8D%E5%86%99%E6%B3%95%EF%BC%8C%E4%BD%86%E6%98%AF%E6%AF%94%E8%BE%83%E5%8D%A0%E7%94%A8%E6%97%B6%E9%97%B4%0A%0A%20%20%20%20%20%20%20%203.%20%E7%BB%93%E8%AE%BA%EF%BC%9A%E5%BC%82%E6%AD%A5%E8%AF%BB%E5%8F%96%E6%96%87%E4%BB%B6%E7%94%B1%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F%E5%9C%A8%E5%90%8E%E5%8F%B0%E8%AF%BB%E5%8F%96%EF%BC%8C%E4%B8%8D%E4%BC%9A%E9%98%BB%E7%A2%8D%E4%B8%8B%E9%9D%A2%E4%BB%A3%E7%A0%81%E6%89%A7%E8%A1%8C%E3%80%82%E5%90%8C%E6%AD%A5%E8%AF%BB%E5%8F%96%E9%98%BB%E7%A2%8D%E4%B8%8B%E9%9D%A2%E4%BB%A3%E7%A0%81%E6%89%A7%E8%A1%8C%E3%80%82%0A%20%20%20%20%20%20%20%20%0A%20%20%20%20-%20%E5%86%99%EF%BC%9A%0A%20%20%20%20%20%20%20%201.%20%60fs.writeFile('%E8%B7%AF%E5%BE%84'%2C'%E5%86%85%E5%AE%B9'%2C%E5%9B%9E%E8%B0%83(err))%60%0A%20%20%20%20%20%20%20%20%20%20%20%20-%20%E6%9C%89%E5%9B%9E%E8%B0%83%EF%BC%8C%E6%98%AF%E5%BC%82%E6%AD%A5%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20-%20err%EF%BC%9A%E9%94%99%E8%AF%AF%EF%BC%8Cnull%E6%88%96%E8%80%85undefined%EF%BC%8C%E8%A1%A8%E7%A4%BA%E6%B2%A1%E6%9C%89%E9%94%99%E8%AF%AF%0A%20%20%20%20%20%20%20%202.%20%60let%20data%20%3D%20fs.writeFileSync('%E8%B7%AF%E5%BE%84'%2C'%E5%86%85%E5%AE%B9')%60%0A%20%20%20%20%20%20%20%20%20%20%20%20-%20%E5%90%8C%E6%AD%A5%EF%BC%8C%E5%85%8D%E5%8E%BB%E5%9B%9E%E8%B0%83%E5%9C%B0%E7%8B%B1%EF%BC%8C%E5%B0%BD%E9%87%8F%E7%94%A8%E8%BF%99%E7%A7%8D%E5%86%99%E6%B3%95%EF%BC%8C%E4%BD%86%E6%98%AF%E6%AF%94%E8%BE%83%E5%8D%A0%E7%94%A8%E6%97%B6%E9%97%B4%0A%20%20%20%20%20%20%20%20%0A%20%20%20%20-%20%E5%88%A0%EF%BC%9A%0A%20%20%20%20%20%20%20%20%60fs.unlink('%E8%B7%AF%E5%BE%84'%2C%E5%9B%9E%E8%B0%83)%60%0A%20%20%20%20-%20%E6%94%B9%E5%90%8D%EF%BC%9A%0A%20%20%20%20%20%20%20%20%60fs.rename('%E8%80%81%E6%96%87%E4%BB%B6%E5%90%8D'%2C'%E6%96%B0%E6%96%87%E4%BB%B6%E5%90%8D'%2C(err)%3D%3E%7B%7D)%60%0A%0A3.%20%E5%AE%9E%E7%8E%B0%E9%9D%99%E6%80%81%E8%B5%84%E6%BA%90%E6%89%98%E7%AE%A1%3A%0A%20%20%20%20-%20%E4%BB%80%E4%B9%88%E6%98%AF%E9%9D%99%E6%80%81%E8%B5%84%E6%BA%90%EF%BC%9A%20css%2Fhtml%2Fjs%2F%E5%9B%BE%E7%89%87%2Fjson%2F%E5%AD%97%E4%BD%93...%0A%20%20%20%20-%20%E5%89%8D%E7%AB%AF%E8%B5%84%E6%BA%90%E8%AF%B7%E6%B1%82%3A%0A%20%20%20%20%20%20%20%20-%20href%2Fsrc%2Flocaction.href%0A%20%20%20%20-%20%E5%90%8E%E7%AB%AF%E8%B5%84%E6%BA%90%E8%AF%BB%E5%8F%96%EF%BC%9A%0A%20%20%20%20%20%20%20%20%60fs.readFile(%E6%96%87%E4%BB%B6%E5%90%8D%2C%5B%E7%BC%96%E7%A0%81%5D%2C%E5%9B%9E%E8%B0%83(err%2Cdata))%3B%60%0A%0A%23%23%23%20url%E6%A8%A1%E5%9D%97%09%0A1.%20%E4%BD%9C%E7%94%A8%EF%BC%9A%E5%A4%84%E7%90%86%E5%9C%B0%E5%9D%80%E6%A0%8F%E5%9E%8B%E6%95%B0%E6%8D%AE%0A2.%20%E5%BC%95%E5%85%A5%EF%BC%9A%60const%20url%20%3D%20require(%22url%22)%3B%60%0A3.%20%E4%BD%BF%E7%94%A8%EF%BC%9A%0A%20%20%20%20-%20%E5%AD%97%E7%AC%A6%E8%BD%AC%E5%AF%B9%E8%B1%A1%0A%20%20%20%20%20%20%20%20-%20%60str%20%3D%20%22http%3A%2F%2Flocalhost%3A8002%2Faaa%3Fusername%3Dsdfsdf%26content%3D234234%23title4%22%3B%60%0A%20%20%20%20%20%20%20%20-%20%60url.parse(str%2Ctrue)%60%0A%20%20%20%20%20%20%20%20%20%20%20%20-%20true%20%E5%A4%84%E7%90%86query%E6%95%B0%E6%8D%AE%EF%BC%8C%E7%9B%B4%E6%8E%A5%E8%BD%AC%E6%88%90%E5%AF%B9%E8%B1%A1%0A%20%20%20%20%20%20%20%20-%20obj%E5%8F%82%E6%95%B0%0A%20%20%20%20%20%20%20%20%20%20%20%20-%20protocol%3A%20'http%3A'%EF%BC%8C%20%20%E5%8D%8F%E8%AE%AE%0A%20%20%20%20%20%20%20%20%20%20%20%20-%20slashes%3A%20true%EF%BC%8C%20%20%E5%8F%8C%E6%96%9C%E6%9D%A0%0A%20%20%20%20%20%20%20%20%20%20%20%20-%20auth%3A%20null%EF%BC%8C%20%20%E4%BD%9C%E8%80%85%0A%20%20%20%20%20%20%20%20%20%20%20%20-%20host%3A%20'localhost%3A8002'%EF%BC%8C%20%20%E4%B8%BB%E6%9C%BA%20www.baidu.com%0A%20%20%20%20%20%20%20%20%20%20%20%20-%20port%3A%20'8002'%EF%BC%8C%20%20%E7%AB%AF%E5%8F%A3%0A%20%20%20%20%20%20%20%20%20%20%20%20-%20hostname%3A%20'localhost'%EF%BC%8C%20%20baidu%0A%20%20%20%20%20%20%20%20%20%20%20%20-%20hash%3A%20'%23title'%EF%BC%8C%20%20%E5%93%88%E5%B8%8C%EF%BC%88%E9%94%9A)%0A%20%20%20%20%20%20%20%20%20%20%20%20-%20search%3A%20'%3Fusername%3Dsdfsdf%26content%3D234234'%EF%BC%8C%20%20%E6%95%B0%E6%8D%AE%0A%20%20%20%20%20%20%20%20%20%20%20%20-%20query%3A%20'username%3Dsdfsdf%26content%3D234234'%EF%BC%8C%20%20%E6%95%B0%E6%8D%AE%0A%20%20%20%20%20%20%20%20%20%20%20%20-%20pathname%3A%20'%2Faaa'%EF%BC%8C%20%20%E6%96%87%E4%BB%B6%E8%B7%AF%E5%BE%84%0A%20%20%20%20%20%20%20%20%20%20%20%20-%20path%3A%20'%2Faaa%3Fusername%3Dsdfsdf%26content%3D234234'%EF%BC%8C%20%20%E6%96%87%E4%BB%B6%E8%B7%AF%E5%BE%84%0A%20%20%20%20%20%20%20%20%20%20%20%20-%20href%3A%20'http%3A%2F%2Flocalhost%3A8002%2Faaa%3Fusername%3Dsdfsdf%26content%3D234234%23title'%0A%20%20%20%20-%20%E5%AF%B9%E8%B1%A1%E8%BD%AC%E5%AD%97%E7%AC%A6%0A%20%20%20%20%20%20%20%20-%20%60url.format(obj)%60%0A%0A%23%23%23%20querystring%20%E6%A8%A1%E5%9D%97%20%0A1.%20%E4%BD%9C%E7%94%A8%EF%BC%9A%E5%A4%84%E7%90%86%E6%9F%A5%E8%AF%A2%E5%AD%97%E7%AC%A6%E4%B8%B2%0A%20%20%20%20-%20%60var%20str%20%3D%20%22%3Fkey%3Dvalue%26key2%3Dvalue2%22%3B%60%0A2.%20%E5%BC%95%E5%85%A5%EF%BC%9A%60const%20querystring%20%3D%20require(%22querystring%22)%3B%60%0A3.%20%E5%AD%97%E7%AC%A6%E8%BD%AC%E5%AF%B9%E8%B1%A1%EF%BC%9A%0A%20%20%20%20-%20%60querystring.parse(str)%60%0A4.%20%E5%AF%B9%E8%B1%A1%E8%BD%AC%E5%AD%97%E7%AC%A6%0A%20%20%20%20-%20%60querystring.stringify(obj)%60%0A%0A%23%20%E5%9B%9B%E3%80%81%E5%8C%85%E7%AE%A1%E7%90%86%E5%99%A8%20-%20npm%0A1.%20%E4%BB%8B%E7%BB%8D%EF%BC%9A%0A%20%20%20%20-%20%E4%BD%9C%E7%94%A8%EF%BC%9A%E5%AE%89%E8%A3%85%E6%A8%A1%E5%9D%97%EF%BC%88%E5%8C%85%EF%BC%89%EF%BC%8C%E8%87%AA%E5%8A%A8%E5%AE%89%E8%A3%85%E4%BE%9D%E8%B5%96%EF%BC%8C%E7%AE%A1%E7%90%86%E5%8C%85%EF%BC%88%E5%A2%9E%EF%BC%8C%E5%88%A0%EF%BC%8C%E6%9B%B4%E6%96%B0%EF%BC%8C%E9%A1%B9%E7%9B%AE%E6%89%80%E6%9C%89%E5%8C%85)%0A%20%20%20%20-%20nodejs%20%E7%8E%AF%E5%A2%83%E8%87%AA%E5%B8%A6%20npm%20%E7%8E%AF%E5%A2%83%0A%20%20%20%20%20%20%20%20-%20%E6%96%87%E6%A1%A3%EF%BC%9A%5Bhttps%3A%2F%2Fwww.npmjs.cn%2F%5D(https%3A%2F%2Fwww.npmjs.cn%2F)%0A%20%20%20%20%20%20%20%20-%20%E9%95%9C%E5%83%8F%EF%BC%9A%5Bhttp%3A%2F%2Fnpm.taobao.org%2F%5D(http%3A%2F%2Fnpm.taobao.org%2F)%0A%20%20%20%20-%20%E7%B1%BB%E4%BC%BC%EF%BC%9A%5Bbower%5D(https%3A%2F%2Fbower.io%2F)%EF%BC%8C%5Byarn%5D(https%3A%2F%2Fyarn.bootcss.com)%0A%0A2.%20%E5%AE%89%E8%A3%85%E7%8E%AF%E5%A2%83%E4%BD%8D%E7%BD%AE%EF%BC%9A%0A%20%20%20%201.%20%E5%85%A8%E5%B1%80%EF%BC%9A%E5%8F%AF%E4%BB%A5%E7%8B%AC%E7%AB%8B%E8%BF%90%E8%A1%8C%20%7C%7C%20%E9%80%9A%E8%BF%87npm%20run%20%E8%BF%90%E8%A1%8C%0A%20%20%20%20%20%20%20%20-%20%E5%B7%A5%E5%85%B7%E5%91%BD%E4%BB%A4%E8%A1%8C%EF%BC%8C%E8%84%9A%E6%89%8B%E6%9E%B6%0A%20%20%20%20%20%20%20%20-%20%E5%AE%89%E8%A3%85%E3%80%81%E5%8D%B8%E8%BD%BD%E5%88%B0%E5%85%A8%E5%B1%80%0A%20%20%20%20%20%20%20%20%20%20%20%20-%20npm%20i%20%E5%8C%85%E5%90%8D%20-g%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20-%20g%20%3D%3D%20golbal%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20-%20yarn%20add%20%E5%8C%85%E5%90%8D%20%7C%20%20bower%20install%20%E5%8C%85%E5%90%8D%0A%20%20%20%20%20%20%20%20%20%20%20%20-%20npm%20uninstall%20%E5%8C%85%E5%90%8D%20-g%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20-%20yarn%20remove%20%E5%8C%85%E5%90%8D%20%7C%20bower%20uninstall%20%E5%8C%85%E5%90%8D%0A%0A%20%20%20%202.%20%E9%A1%B9%E7%9B%AE%E7%8E%AF%E5%A2%83%EF%BC%9A%E5%8F%AA%E8%83%BD%E9%80%9A%E8%BF%87npm%20run%20%E8%BF%90%E8%A1%8C%0A%20%20%20%20%20%20%20%20-%20%E9%A1%B9%E7%9B%AE%E4%BE%9D%E8%B5%96dependencies%EF%BC%9A%0A%20%20%20%20%20%20%20%20%20%20%20%20-%20%E8%BF%90%E8%A1%8C%E6%97%B6%E7%9A%84%E4%BE%9D%E8%B5%96%EF%BC%8C%E5%8F%91%E5%B8%83%E5%90%8E%EF%BC%8C%E5%8D%B3%E7%94%9F%E4%BA%A7%E7%8E%AF%E5%A2%83%E4%B8%8B%E8%BF%98%E9%9C%80%E8%A6%81%E7%94%A8%E7%9A%84%E6%A8%A1%E5%9D%97%E3%80%82%20%20--save%20%7C%7C%20-S%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20-%20express%EF%BC%8Cjquery%0A%20%20%20%20%20%20%20%20-%20%E5%BC%80%E5%8F%91%E4%BE%9D%E8%B5%96devDependencies%EF%BC%9A%0A%20%20%20%20%20%20%20%20%20%20%20%20-%20%E5%BC%80%E5%8F%91%E6%97%B6%E7%9A%84%E4%BE%9D%E8%B5%96%E3%80%82%E9%87%8C%E9%9D%A2%E7%9A%84%E6%A8%A1%E5%9D%97%E6%98%AF%E5%BC%80%E5%8F%91%E6%97%B6%E7%94%A8%E7%9A%84%EF%BC%8C%E5%8F%91%E5%B8%83%E6%97%B6%E7%94%A8%E4%B8%8D%E5%88%B0%E5%AE%83%E3%80%82%20--save-dev%20%7C%7C%20-D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20-%20gulp%0A%20%20%20%20%20%20%20%20-%20%E5%AE%89%E8%A3%85%E5%88%B0%E9%A1%B9%E7%9B%AE%E7%8E%AF%E5%A2%83%0A%20%20%20%20%20%20%20%20%20%20%20%20-%20npm%20install%20%E5%8C%85%E5%90%8D%20-S%0A%20%20%20%20%20%20%20%20%20%20%20%20-%20npm%20install%20%E5%8C%85%E5%90%8D%20-D%0A%0A%20%20%20%203.%20%E6%9F%A5%E7%9C%8B%E5%B7%B2%E5%AE%89%E8%A3%85%3A%0A%20%20%20%20%20%20%20%20-%20%E5%88%97%E5%87%BA%E6%89%80%E6%9C%89%E5%B7%B2%E8%A3%85%E5%8C%85%0A%20%20%20%20%20%20%20%20%20%20%20%20-%20npm%20list%0A%20%20%20%20%20%20%20%20-%20%E7%89%88%E6%9C%AC%E5%AF%B9%E6%AF%94(%E5%AE%89%E8%A3%85%E8%BF%87%E5%BE%97%E5%8C%85)%0A%20%20%20%20%20%20%20%20%20%20%20%20-%20npm%20outdated%0A%20%20%20%20%20%20%20%20-%20%E6%9F%A5%E7%9C%8B%E5%BD%93%E5%89%8D%E5%8C%85%E6%A6%82%E8%A6%81%E4%BF%A1%E6%81%AF%20%0A%20%20%20%20%20%20%20%20%20%20%20%20-%20npm%20info%20%E5%8C%85%E5%90%8D%0A%20%20%20%20%20%20%20%20-%20%E6%9F%A5%E7%9C%8B%E5%8C%85%E5%8E%86%E5%8F%B2%E7%89%88%E6%9C%AC%E5%88%97%E8%A1%A8%0A%20%20%20%20%20%20%20%20%20%20%20%20-%20npm%20view%20%E5%8C%85%E5%90%8D%20versions%0A%0A3.%20%E7%AE%A1%E7%90%86%E6%A8%A1%E5%9D%97(%E9%A1%B9%E7%9B%AE)%3A%0A%20%20%20%20-%20package.json%E7%9A%84name%E7%9A%84%E5%90%8D%E5%AD%97%E9%9C%80%E8%A6%81%E5%92%8C%E9%A1%B9%E7%9B%AE%E7%9B%AE%E5%BD%95%E5%90%8D%E4%B8%80%E8%87%B4%EF%BC%8C%E4%B8%8D%E8%A6%81%E5%92%8C%E4%BE%9D%E8%B5%96%E7%9A%84%E5%8C%85%E9%87%8D%E5%90%8D%0A%20%20%20%20-%20%E5%88%9D%E5%A7%8B%E5%8C%96npm%E7%AE%A1%E7%90%86%E6%96%87%E4%BB%B6(package.json)%0A%20%20%20%20%20%20%20%20-%20%60npm%20init%60%0A%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%60%60%60json%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%22name%22%3A%20%22npm%22%2C%20%20%20%20%20%20%20%20%20%20%2F%2F%20%E9%A1%B9%E7%9B%AE%E5%90%8D%E7%A7%B0%0A%20%20%20%20%20%20%20%20%20%20%20%20%22version%22%3A%20%220.0.1%22%2C%20%20%20%20%20%2F%2F%20%E7%89%88%E6%9C%AC%0A%20%20%20%20%20%20%20%20%20%20%20%20%22description%22%3A%20%22test%20and%20play%22%2C%20%20%20%20%20%2F%2F%20%E6%8F%8F%E8%BF%B0%0A%20%20%20%20%20%20%20%20%20%20%20%20%22main%22%3A%20%22index.js%22%2C%20%20%20%20%20%2F%2F%20%E5%85%A5%E5%8F%A3%E6%96%87%E4%BB%B6%0A%20%20%20%20%20%20%20%20%20%20%20%20%22dependencies%22%3A%20%7B%20%20%20%20%20%20%20%2F%2F%20%E9%A1%B9%E7%9B%AE%E4%BE%9D%E8%B5%96%20%20%E4%B8%8A%E7%BA%BF%E4%B9%9F%E8%A6%81%E7%94%A8%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22jquery%22%3A%20%22%5E3.2.1%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22express%22%3A%20%22%5E4.17.1%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22devDependencies%22%3A%20%7B%20%20%20%20%2F%2F%20%E5%BC%80%E5%8F%91%E4%BE%9D%E8%B5%96%20%20%E4%B8%8A%E7%BA%BF%E5%B0%B1%E4%B8%8D%E7%94%A8%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22animate.css%22%3A%20%22%5E3.5.2%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22scripts%22%3A%20%7B%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%20%E5%91%BD%E4%BB%A4%E8%A1%8C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22test%22%3A%20%22%E5%91%BD%E4%BB%A4%E8%A1%8C%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22repository%22%3A%20%7B%20%20%20%20%20%20%20%20%20%2F%2F%20%E4%BB%93%E5%BA%93%E4%BF%A1%E6%81%AF%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22type%22%3A%20%22git%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22url%22%3A%20%22https%3A%2F%2Fgitee.com%2Fliyangyf%2Fhammer.git%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22keywords%22%3A%20%5B%20%20%20%20%20%20%20%20%20%20%20%2F%2F%20%E5%85%B3%E9%94%AE%E8%AF%8D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22test%22%2C'xx'%2C'oo'%0A%20%20%20%20%20%20%20%20%20%20%20%20%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22author%22%3A%20%22%E6%BD%9C%E6%B0%B4%E7%9A%84%E6%97%B1%E9%B8%AD%E5%AD%90%22%2C%20%2F%2F%20%E4%BD%9C%E8%80%85%0A%20%20%20%20%20%20%20%20%20%20%20%20%22license%22%3A%20%22ISC%22%2C%20%20%20%20%20%20%20%2F%2F%20%E8%AE%A4%E8%AF%81%0A%20%20%20%20%20%20%20%20%20%20%20%20%22homepage%22%3A%20%22https%3A%2F%2Fgitee.com%2Fliyangyf%2Fhammer.git%22%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%60%60%60%0A%0A%20%20%20%20-%20%E5%AE%89%E8%A3%85%E5%88%B0%E9%A1%B9%E7%9B%AE%E4%BE%9D%E8%B5%96%20%20%20%E4%BB%A5%E5%90%8E%E4%B8%8A%E7%BA%BF%E4%BB%8D%E7%84%B6%E9%9C%80%E8%A6%81%E7%9A%84%E5%8C%85%0A%20%20%20%20%20%20%20%20-%20%60npm%20install%20%E5%8C%85%E5%90%8D%20--save%20%20%7C%20%20-S%60%0A%20%20%20%20-%20%E5%AE%89%E8%A3%85%E5%88%B0%E5%BC%80%E5%8F%91%E4%BE%9D%E8%B5%96%20%20%20%E4%B8%8A%E7%BA%BF%E5%90%8E%E4%B8%8D%E9%9C%80%E8%A6%81%E7%9A%84%E5%8C%85%0A%20%20%20%20%20%20%20%20-%20%60npm%20install%20%E5%8C%85%E5%90%8D%20--save-dev%20%7C%20%20-D%60%0A%20%20%20%20-%20%E5%AE%89%E8%A3%85package.json%E9%87%8C%E9%9D%A2%E6%8C%87%E5%AE%9A%E7%9A%84%E6%89%80%E6%9C%89%E5%8C%85%0A%20%20%20%20%20%20%20%20-%20%60npm%20install%60%0A%0A%20%20%20%20-%20%E7%89%88%E6%9C%AC%E7%BA%A6%E6%9D%9F%EF%BC%9A%0A%20%20%20%20%20%20%20%20-%20%60%5Ex.x.x%60%20%20%20%20%20%20%E7%BA%A6%E6%9D%9F%E4%B8%BB%E7%89%88%E6%9C%AC%EF%BC%8C%E5%90%8E%E7%BB%AD%E6%89%BE%E6%9C%80%E6%96%B0%0A%20%20%20%20%20%20%20%20-%20%60~x.x.x%60%20%20%20%20%20%20%E4%BF%9D%E6%8C%81%E5%89%8D%E4%B8%A4%E4%BD%8D%E4%B8%8D%E5%8F%98%EF%BC%8C%E5%90%8E%E7%BB%AD%E6%89%BE%E6%9C%80%E6%96%B0%0A%20%20%20%20%20%20%20%20-%20%60*%60%20%20%20%20%20%20%20%20%20%20%20%E8%A3%85%E6%9C%80%E6%96%B0%0A%20%20%20%20%20%20%20%20-%20%60x.x.x%60%20%20%20%20%20%20%20%E6%8C%87%E5%AE%9A%E4%B8%80%E4%B8%AA%E7%89%88%E6%9C%AC%0A%20%20%20%20%0A%20%20%20%20-%20%E7%AE%A1%E7%90%86%E4%B8%8B%E8%BD%BD%E6%BA%90%E5%B7%A5%E5%85%B7%0A%20%20%20%20%20%20%20%20-%20%E5%AE%89%E8%A3%85%E9%80%89%E6%8B%A9%E6%BA%90%E7%9A%84%E5%B7%A5%E5%85%B7%E5%8C%85%EF%BC%9Anpm%20install%20nrm%20-g%0A%20%20%20%20%20%20%20%20-%20%E6%9F%A5%E7%9C%8B%E6%89%80%E6%9C%89%E6%BA%90%EF%BC%9Anrm%20ls%0A%20%20%20%20%20%20%20%20-%20%E6%B5%8B%E8%AF%95%E6%89%80%E6%9C%89%E6%BA%90%EF%BC%9Anrm%20test%0A%20%20%20%20%20%20%20%20-%20%E5%88%87%E6%8D%A2%E6%BA%90%EF%BC%9Anrm%20use%20%E6%BA%90%E5%90%8D%0A%20%20%20%20%0A%20%20%20%20-%20%E6%A8%A1%E5%9D%97%E4%B8%8B%E8%BD%BD%EF%BC%8C%E5%8D%A1%E9%A1%BF%E8%B6%85%E8%BF%875%E5%88%86%E9%92%9F%20%7C%20%E6%8A%A5%E9%94%99%0A%20%20%20%20%20%20%20%20-%20ctrl%20%2B%20c%20-%3E%20npm%20uninstall%20%E5%8C%85%E5%90%8D%20%20-%3E%20npm%20cache%20clean%20--force(%E6%B8%85%E9%99%A4%E7%BC%93%E5%AD%98)%20-%3E%20%E6%8D%A24g%E7%BD%91%E7%BB%9C%20-%3E%20npm%20install%20%E5%8C%85%E5%90%8D%0A%0A%0A4.%20%E5%85%B6%E4%BB%96%E5%8C%85%E7%AE%A1%E7%90%86%E5%99%A8%0A%20%20%20%20-%20yarn%20...%0A%0A%0A%0A%23%20%E4%BA%94%E3%80%81Express%E7%9A%84%E5%AE%89%E8%A3%85%E5%92%8C%E4%BD%BF%E7%94%A8%0A1.%20%E4%BB%8B%E7%BB%8D%EF%BC%9A%0A%20%20%20%20-%20%5BExpress%5D(https%3A%2F%2Fwww.expressjs.com.cn%2F)%20%E6%98%AF%E5%9F%BA%E4%BA%8ENode.Js%E5%B9%B3%E5%8F%B0%EF%BC%8C%E5%BF%AB%E9%80%9F%EF%BC%8C%E5%BC%80%E6%94%BE%EF%BC%8C%E6%9E%81%E7%AE%80%E7%9A%84Web%E5%BC%80%E5%8F%91%E6%A1%86%E6%9E%B6%E3%80%82%E7%B1%BB%E4%BC%BCjs%E4%B8%AD%E7%9A%84jQuery%E3%80%82%0A%20%20%20%20%0A%20%20%20%20-%20%E6%98%AFNode.Js%E7%9A%84%E7%AC%AC%E4%B8%89%E6%96%B9%E6%A8%A1%E5%9D%97%EF%BC%8C%E9%9C%80%E8%A6%81%E5%AE%89%E8%A3%85%E4%B9%8B%E5%90%8E%E6%89%8D%E8%83%BD%E4%BD%BF%E7%94%A8%20%20%20%20%0A%20%20%20%20%0A2.%20%E5%87%86%E5%A4%87%0A%20%20%20%20-%20%E9%A6%96%E5%85%88%E5%87%86%E5%A4%87%E5%A5%BD%E9%A1%B9%E7%9B%AE%E7%9B%AE%E5%BD%95%EF%BC%9A%0A%20%20%20%20%20%20%20%20-%20%E6%96%B0%E5%BB%BA%E6%96%87%E4%BB%B6%E5%A4%B9%EF%BC%8C%E5%9C%A8%E5%BD%93%E5%89%8D%E7%9B%AE%E5%BD%95%E4%B8%8B%E6%89%93%E5%BC%80%E5%91%BD%E4%BB%A4%E6%8F%90%E7%A4%BA%E7%AC%A6%EF%BC%8C%E4%BD%BF%E7%94%A8npm%20init%E5%88%9B%E5%BB%BA%E9%A1%B9%E7%9B%AE%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6package.json%0A%0A%20%20%20%20-%20%5B%E5%AE%89%E8%A3%85Express%5D(https%3A%2F%2Fwww.expressjs.com.cn%2Fstarter%2Finstalling.html)%EF%BC%9A%0A%20%20%20%20%20%20%20%20-%20%60npm%20install%20express%20-S%60%0A%0A3.%20%5B%E5%AE%89%E8%A3%85%E4%B9%8B%E5%90%8E%EF%BC%8C%E9%9C%80%E8%A6%81%E5%9C%A8%E6%96%87%E4%BB%B6%E5%BC%95%E5%85%A5%E6%89%8D%E8%83%BD%E4%BD%BF%E7%94%A8%5D(https%3A%2F%2Fwww.expressjs.com.cn%2Fstarter%2Fhello-world.html)%EF%BC%9A%0A%20%20%20%20-%20%60const%20express%20%3D%20require(%22express%22)%3B%60%0A%20%20%20%20%20%20%20%20-%20express%E8%87%AA%E8%BA%AB%E6%98%AF%E4%B8%80%E4%B8%AA%E5%87%BD%E6%95%B0%EF%BC%8C%E6%89%A7%E8%A1%8C%E4%B9%8B%E5%90%8E%EF%BC%8C%E6%8B%BF%E5%88%B0express%E5%AF%B9%E8%B1%A1%0A%20%20%20%20-%20%60const%20app%20%3D%20express()%3B%60%0A%20%20%20%20%20%20%20%20-%20%E7%B1%BB%E4%BC%BC%E4%BA%8Econst%20serverObj%20%3D%20http.createServer()%0A%0A%20%20%20%20-%20%60app.listen(%E7%AB%AF%E5%8F%A3%2C()%3D%3E%7B%7D)%60%0A%20%20%20%20%20%20%20%20-%20%E5%BC%80%E5%90%AF%E6%8C%87%E5%AE%9A%E7%AB%AF%E5%8F%A3%E7%9A%84%E7%9B%91%E5%90%AC%EF%BC%8C%E5%BC%80%E5%90%AF%E6%88%90%E5%8A%9F%E5%90%8E%E6%89%A7%E8%A1%8C%E5%9B%9E%E8%B0%83%E5%87%BD%E6%95%B0%0A%20%20%20%20%20%20%20%20-%20%E7%B1%BB%E4%BC%BC%E4%BA%8EserverObj.listen(%E7%AB%AF%E5%8F%A3%2C()%3D%3E%7B%7D)%0A%0A4.%20express%E5%9F%BA%E7%A1%80%E4%BD%BF%E7%94%A8%3A%0A%20%20%20%20-%20%60app.use(%E8%B7%AF%E5%BE%84%2C(req%2Cres)%3D%3E%7B%7D)%3B%60%0A%20%20%20%20%20%20%20%20-%20%E5%BD%93%E6%8E%A5%E6%94%B6%E5%88%B0%E6%8C%87%E5%AE%9A%E8%AF%B7%E6%B1%82%E8%B7%AF%E5%BE%84%E4%B9%8B%E5%90%8E%EF%BC%8C%E6%89%A7%E8%A1%8C%E5%AF%B9%E5%BA%94%E7%9A%84%E5%9B%9E%E8%B0%83%E5%87%BD%E6%95%B0%0A%20%20%20%20-%20%60app.get(%E8%B7%AF%E5%BE%84%2C(req%2Cres)%3D%3E%7B%7D)%3B%60%0A%20%20%20%20%20%20%20%20-%20%E5%8F%AA%E8%83%BD%E6%8E%A5%E6%94%B6%E6%8C%87%E5%AE%9A%E8%AF%B7%E6%B1%82%E8%B7%AF%E5%BE%84%E7%9A%84get%E8%AF%B7%E6%B1%82%EF%BC%8C%E6%89%A7%E8%A1%8C%E5%AF%B9%E5%BA%94%E7%9A%84%E5%9B%9E%E8%B0%83%E5%87%BD%E6%95%B0%0A%20%20%20%20-%20%60app.post(%E8%B7%AF%E5%BE%84%2C(req%2Cres)%3D%3E%7B%7D)%3B%60%0A%20%20%20%20%20%20%20%20-%20%E5%8F%AA%E8%83%BD%E6%8E%A5%E6%94%B6%E6%8C%87%E5%AE%9A%E8%AF%B7%E6%B1%82%E8%B7%AF%E5%BE%84%E7%9A%84post%E8%AF%B7%E6%B1%82%EF%BC%8C%E6%89%A7%E8%A1%8C%E5%AF%B9%E5%BA%94%E7%9A%84%E5%9B%9E%E8%B0%83%E5%87%BD%E6%95%B0%0A%20%20%20%20%20%20%20%20%0A5.%20express%E5%AF%B9%E7%9B%B8%E5%BA%94%E8%AF%B7%E6%B1%82%E7%9A%84%E6%96%B9%E6%B3%95%E5%86%85%E7%9A%84req%E5%92%8Cres%E5%AF%B9%E8%B1%A1%E5%81%9A%E4%BA%86%E5%A2%9E%E5%BC%BA%EF%BC%9A%0A%20%20%20%20-%20req%E8%A1%A8%E7%A4%BA%E5%89%8D%E7%AB%AF%E5%88%B0%E5%90%8E%E5%8F%B0%E7%9A%84%E4%BF%A1%E6%81%AF%0A%20%20%20%20-%20res%E8%A1%A8%E7%A4%BA%E5%90%8E%E5%8F%B0%E5%88%B0%E5%89%8D%E7%AB%AF%E7%9A%84%E4%BF%A1%E6%81%AF%0A%20%20%20%20-%20%E4%BF%9D%E7%95%99%E4%BA%86%E5%8E%9F%E6%9C%89%E5%B1%9E%E6%80%A7%E5%92%8C%E6%96%B9%E6%B3%95%EF%BC%9A%E5%A6%82req.url%2Fres.write%2Fres.end%0A%20%20%20%20-%20%E5%A2%9E%E5%8A%A0%E4%BA%86%EF%BC%9A%0A%20%20%20%20%20%20%20%20-%20%60res.send()%60%0A%20%20%20%20%20%20%20%20%20%20%20%20-%20%E8%BF%94%E5%9B%9E%E6%95%B0%E6%8D%AE%E5%B9%B6%E7%BB%93%E6%9D%9F%E8%AF%B7%E6%B1%82%0A%20%20%20%20%20%20%20%20-%20%60req.query%60%0A%20%20%20%20%20%20%20%20%20%20%20%20-%20%E6%8E%A5%E6%94%B6get%E6%95%B0%E6%8D%AE%EF%BC%8C%E5%AF%B9%E8%B1%A1%E7%B1%BB%E5%9E%8B%0A%20%20%20%20%20%20%20%20-%20%60req.body%60%0A%20%20%20%20%20%20%20%20%20%20%20%20-%20%E6%8E%A5%E6%94%B6post%E6%95%B0%E6%8D%AE%EF%BC%8C%E5%AF%B9%E8%B1%A1%E7%B1%BB%E5%9E%8B%EF%BC%88%E9%9C%80%E8%A6%81%E4%BD%BF%E7%94%A8%E4%B8%AD%E9%97%B4%E4%BB%B6body-parser%E8%A7%A3%E6%9E%90%EF%BC%89%0A%20%20%20%20%20%20%20%20-%20%60req.method%60%0A%20%20%20%20%20%20%20%20%20%20%20%20-%20%E6%9F%A5%E7%9C%8B%E5%BD%93%E5%89%8D%E8%AF%B7%E6%B1%82%E6%96%B9%E5%BC%8F%EF%BC%8Cget%2Fpost%0A%20%20%20%20%20%20%20%20%0A6.%20express%E7%9A%84%E7%89%B9%E7%82%B9%E5%B0%B1%E6%98%AF%E5%AF%B9%E5%8E%9F%E7%94%9FNodeJs%E5%81%9A%E4%BA%86%E4%BA%8C%E6%AC%A1%E5%B0%81%E8%A3%85%EF%BC%8C%E9%9D%9E%E4%BE%B5%E5%85%A5%E5%BC%8F%E3%80%82%E5%90%8C%E6%97%B6%E6%9F%90%E4%BA%9B%E5%8A%9F%E8%83%BD%E9%9C%80%E8%A6%81%E9%85%8D%E5%90%88%E4%B8%AD%E9%97%B4%E4%BB%B6%E4%BD%BF%E7%94%A8%E3%80%82%0A%0A%23%20%E5%85%AD%E3%80%81%E4%BB%80%E4%B9%88%E6%98%AF%E4%B8%AD%E9%97%B4%E4%BB%B6%0A1.%20express%E6%98%AF%E4%B8%80%E4%B8%AA%E8%B7%AF%E7%94%B1%E5%92%8C%E4%B8%AD%E9%97%B4%E4%BB%B6Web%E6%A1%86%E6%9E%B6%EF%BC%8C%E5%85%B6%E8%87%AA%E8%BA%AB%E7%9A%84%E5%8A%9F%E8%83%BD%E5%BE%88%E5%B0%91%EF%BC%9Aexpress%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F%E6%9C%AC%E8%B4%A8%E4%B8%8A%E6%98%AF%E5%AF%B9%E4%B8%80%E7%B3%BB%E5%88%97%E4%B8%AD%E9%97%B4%E4%BB%B6%E5%87%BD%E6%95%B0%E8%B0%83%E7%94%A8%E3%80%82%0A%0A2.%20%E7%AE%80%E5%8D%95%E7%9A%84%E8%AF%B4%EF%BC%8C%E4%B8%AD%E9%97%B4%E4%BB%B6%EF%BC%8C%E5%B0%B1%E6%98%AF%E5%B0%81%E8%A3%85%E5%A5%BD%E7%9A%84%E5%87%BD%E6%95%B0%EF%BC%8C%E7%B1%BB%E4%BC%BC%E4%BA%8Ejq%E7%9A%84%E6%8F%92%E4%BB%B6%EF%BC%8Cexpress%E8%87%AA%E8%BA%AB%E7%9A%84%E5%8A%9F%E8%83%BD%E5%BE%88%E5%B0%91%EF%BC%8C%E4%B8%80%E4%BA%9B%E5%8A%9F%E8%83%BD%E7%9A%84%E5%AE%9E%E7%8E%B0%EF%BC%8C%E9%83%BD%E6%98%AF%E9%80%9A%E8%BF%87%E4%B8%AD%E9%97%B4%E4%BB%B6%EF%BC%8C%E6%9D%A5%E5%AE%8C%E6%88%90%E3%80%82%0A%0A3.%20express%E4%B8%AD%E9%97%B4%E4%BB%B6%E7%9A%84%E4%BD%BF%E7%94%A8%EF%BC%9A%0A%20%20%20%20-%20body-parser%E4%B8%AD%E9%97%B4%E4%BB%B6%EF%BC%9A%0A%20%20%20%20%20%20%20%20-%20%E4%B8%8B%E8%BD%BD%E4%B8%AD%E9%97%B4%E4%BB%B6%EF%BC%9A%EF%BC%88%E8%A7%A3%E6%9E%90post%E6%95%B0%E6%8D%AE%EF%BC%89%0A%20%20%20%20%20%20%20%20%20%20%20%20-%20%60npm%20install%20body-parser%60%0A%20%20%20%20%20%20%20%20-%20%E5%BC%95%E5%85%A5%E4%B8%AD%E9%97%B4%E4%BB%B6%0A%20%20%20%20%20%20%20%20%20%20%20%20-%20%60const%20bodyParser%20%3D%20require(%22body-parser%22)%3B%60%0A%20%20%20%20%20%20%20%20-%20%E4%BD%BF%E7%94%A8%E5%B9%B6%E5%B0%86%E4%B8%AD%E9%97%B4%E4%BB%B6%E7%BB%91%E5%AE%9A%E5%88%B0express%E7%9A%84app%E5%AF%B9%E8%B1%A1%0A%20%20%20%20%20%20%20%20%20%20%20%20-%20%60app.use(bodyParser())%60%0A%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20-%20express%E8%87%AA%E5%B8%A6%E7%9A%84%E4%B8%AD%E9%97%B4%E4%BB%B6%EF%BC%9Astatic%EF%BC%88%E9%9D%99%E6%80%81%E6%96%87%E4%BB%B6%E6%89%98%E7%AE%A1%EF%BC%89%0A%20%20%20%20%20%20%20%20-%20%E4%BD%BF%E7%94%A8%E5%B9%B6%E5%B0%86%E4%B8%AD%E9%97%B4%E4%BB%B6%E7%BB%91%E5%AE%9A%E5%88%B0express%E7%9A%84app%E5%AF%B9%E8%B1%A1%0A%20%20%20%20%20%20%20%20%20%20%20%20-%20%60app.use(express.static('.%2Fwww'))%3B%60%0A%0A4.%20%E4%B8%AD%E9%97%B4%E4%BB%B6%E5%B0%B1%E6%98%AF%E4%B8%80%E4%B8%AA%E5%87%BD%E6%95%B0%E6%88%96%E5%AF%B9%E8%B1%A1%EF%BC%8C%E5%B0%81%E8%A3%85%E4%BA%86express%E7%9A%84%E5%8A%9F%E8%83%BD%EF%BC%8C%E7%9B%B8%E5%AF%B9%E4%BA%8Eexpress%E6%9D%A5%E8%AF%B4%EF%BC%8C%E6%98%AF%E6%95%B4%E4%B8%AA%E6%B5%81%E6%B0%B4%E7%BA%BF%E4%B8%8A%E7%9A%84%E4%B8%80%E7%8E%AF%E3%80%82%0A%0A%0A%23%20%E4%B8%83%E3%80%81express%E7%9A%84%E8%B7%AF%E7%94%B1%E4%BB%8B%E7%BB%8D%0A1.%20%E8%B7%AF%E7%94%B1%E6%98%AF%E6%8C%87%EF%BC%8C%E7%A1%AE%E5%AE%9A%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F%EF%BC%8C%E5%A6%82%E4%BD%95%E5%93%8D%E5%BA%94%E5%AF%B9%E7%89%B9%E5%AE%9A%E7%AB%AF%E7%82%B9%E7%9A%84%E5%AE%A2%E6%88%B7%E7%AB%AF%E8%AF%B7%E6%B1%82%EF%BC%8C%E8%AF%A5%E7%89%B9%E5%AE%9A%E7%AB%AF%E7%82%B9%E6%98%AFURI%EF%BC%88%E6%88%96%E8%B7%AF%E5%BE%84%EF%BC%89%E5%92%8C%E7%89%B9%E5%AE%9A%E7%9A%84HTTP%E8%AF%B7%E6%B1%82%E6%96%B9%E6%B3%95%EF%BC%88GET%EF%BC%8CPOST%E7%AD%89%EF%BC%89%E3%80%82%0A%0A2.%20%E6%AF%8F%E4%B8%AA%E8%B7%AF%E7%94%B1%E5%8F%AF%E4%BB%A5%E5%85%B7%E6%9C%89%E4%B8%80%E4%B8%AA%E6%88%96%E5%A4%9A%E4%B8%AA%E5%A4%84%E7%90%86%E5%87%BD%E6%95%B0%EF%BC%8C%E8%BF%99%E4%BA%9B%E5%87%BD%E6%95%B0%E5%9C%A8%E5%8C%B9%E9%85%8D%E8%AF%A5%E8%B7%AF%E7%94%B1%E6%97%B6%E6%89%A7%E8%A1%8C%E3%80%82%0A%0A3.%20express%E7%9A%84%E8%B7%AF%E5%BE%84%E8%AE%BE%E7%BD%AE%E8%AF%AD%E6%B3%95%EF%BC%9A%0A%20%20%20%20-%20%60app.METHOD(PATH%2C%20HANDLER)%60%0A%20%20%20%20%20%20%20%20-%20app%E6%98%AFexpress%E7%9A%84%E6%A8%A1%E5%9D%97%E5%AF%B9%E8%B1%A1%0A%20%20%20%20%20%20%20%20-%20METHOD%E6%98%AF%E5%B0%8F%E5%86%99%E7%9A%84%E8%AF%B7%E6%B1%82%E6%96%B9%E5%BC%8F%0A%20%20%20%20%20%20%20%20-%20PATH%E6%98%AF%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B8%8A%E7%9A%84%E8%B7%AF%E5%BE%84%0A%20%20%20%20%20%20%20%20-%20HANDLER%E6%98%AF%E5%8C%B9%E9%85%8D%E8%B7%AF%E5%BE%84%E6%97%B6%E6%89%A7%E8%A1%8C%E7%9A%84%E5%8A%9F%E8%83%BD%0A%0A4.%20%E5%A6%82%EF%BC%9A%0A%60%60%60js%0A%20%20%20%20app.get('%2F'%2C%20function%20(req%2C%20res)%20%7B%0A%20%20%20%20%20%20%20%20res.send('this%20is%20GET%20request')%0A%20%20%20%20%7D)%0A%0A%20%20%20%20app.post('%2F'%2C%20function%20(req%2C%20res)%20%7B%0A%20%20%20%20%20%20%20%20res.send('this%20is%20POST%20request')%0A%20%20%20%20%7D)%0A%60%60%60%0A%0A%0A%23%20%E5%85%AB%E3%80%81%E9%A1%B9%E7%9B%AE%E7%9A%84%E5%BC%80%E5%8F%91%E6%96%B9%E5%BC%8F%0A1.%20%E5%89%8D%E5%90%8E%E7%AB%AF%E5%88%86%E7%A6%BB%E7%9A%84%E9%A1%B9%E7%9B%AE%0A%20%20%20%20-%20%E5%89%8D%E7%AB%AF%EF%BC%9A%E9%A1%B5%E9%9D%A2%E6%B8%B2%E6%9F%93%0A%20%20%20%20-%20%E6%95%B0%E6%8D%AE%E8%AF%B7%E6%B1%82%E5%B7%A5%E5%85%B7%EF%BC%9Aform%EF%BC%8Cajax%EF%BC%8C......%0A%20%20%20%20-%20%E5%90%8E%E7%AB%AF%EF%BC%9A%E6%95%B0%E6%8D%AE%E5%A4%84%E7%90%86%0A%20%20%20%20-%20%E5%90%8E%E7%AB%AF%E7%AE%A1%E7%90%86%E6%95%B0%E6%8D%AE%E5%BA%93%EF%BC%8C%E5%A4%84%E7%90%86%E6%95%B0%E6%8D%AE%EF%BC%8C%E5%B0%86%E6%95%B0%E6%8D%AE%E5%A4%84%E7%90%86%E6%88%90json%E5%90%8E%EF%BC%8C%E9%80%9A%E8%BF%87%E5%AA%92%E4%BB%8B%E5%8F%91%E7%BB%99%E5%89%8D%E7%AB%AF%EF%BC%8C%E5%89%8D%E7%AB%AF%E6%8E%A5%E6%94%B6%E5%88%B0%E5%90%8E%E7%AB%AF%E7%9A%84%E6%95%B0%E6%8D%AE%EF%BC%8C%E5%A4%84%E7%90%86%E4%B9%8B%E5%90%8E%EF%BC%8C%E6%B8%B2%E6%9F%93%E5%88%B0%E5%89%8D%E7%AB%AF%E9%A1%B5%E9%9D%A2%0A%20%20%20%20-%20%E5%89%8D%E5%90%8E%E7%AB%AF%E5%8F%AF%E4%BB%A5%E5%90%8C%E6%97%B6%E5%BC%80%E5%8F%91%0A%20%20%20%20%0A2.%20%E5%89%8D%E5%90%8E%E7%AB%AF%E4%B8%8D%E5%88%86%E7%A6%BB%E7%9A%84%E9%A1%B9%E7%9B%AE%0A%20%20%20%20-%20%E5%89%8D%E7%AB%AF%EF%BC%9A%E9%9D%99%E6%80%81%E9%A1%B5%0A%20%20%20%20-%20%E5%90%8E%E7%AB%AF%EF%BC%9A%E6%95%B0%E6%8D%AE%E5%A4%84%E7%90%86%EF%BC%8C%E5%B0%86%E5%89%8D%E7%AB%AF%E7%9A%84%E9%9D%99%E6%80%81%E9%A1%B5%E6%94%B9%E6%88%90%E9%A1%B5%E9%9D%A2%E6%A8%A1%E7%89%88%E5%90%8E%EF%BC%8C%E6%B8%B2%E6%9F%93%0A%20%20%20%20-%20%E5%89%8D%E7%AB%AF%E5%85%88%E5%B0%86%E9%9D%99%E6%80%81%E9%A1%B5%E5%87%86%E5%A4%87%E5%A5%BD%EF%BC%8C%E5%8F%91%EF%BC%88U%E7%9B%98%EF%BC%8CQQ%EF%BC%8C%E4%BB%93%E5%BA%93%E5%85%B1%E4%BA%AB%EF%BC%89%E7%BB%99%E5%90%8E%E7%AB%AF%EF%BC%8C%E5%90%8E%E7%AB%AF%E5%B0%86%E5%89%8D%E7%AB%AF%E9%A1%B5%E9%9D%A2%E6%94%B9%E6%88%90%E9%A1%B5%E9%9D%A2%E6%A8%A1%E7%89%88%EF%BC%8C%E5%90%8E%E7%AB%AF%E5%86%8D%E5%8E%BB%E8%AF%B7%E6%B1%82%E6%95%B0%E6%8D%AE%EF%BC%8C%E5%A4%84%E7%90%86%E6%95%B0%E6%8D%AE%EF%BC%8C%E5%B0%86%E6%95%B0%E6%8D%AE%E6%B8%B2%E6%9F%93%E5%88%B0%E6%A8%A1%E7%89%88%EF%BC%8C%E5%B0%86%E6%A8%A1%E7%89%88%E6%B8%B2%E6%9F%93%E5%88%B0%E6%B5%8F%E8%A7%88%E5%99%A8%0A%20%20%20%20%0A%0A3.%20node%E7%9A%84%E5%90%8E%E5%8F%B0%E7%AE%A1%E7%90%86%E9%A1%B9%E7%9B%AE%EF%BC%9A%E5%89%8D%E5%90%8E%E7%AB%AF%E4%B8%8D%E5%88%86%E7%A6%BB%E7%9A%84%E5%BC%80%E5%8F%91%E6%96%B9%E5%BC%8F%0A%0A%0A4.%20%E9%A1%B5%E9%9D%A2%E6%A8%A1%E7%89%88%E6%98%AF%E4%BB%80%E4%B9%88%EF%BC%9A%E5%9C%A8%E9%9D%99%E6%80%81%E9%A1%B5%E4%B8%AD%E6%8F%92%E5%85%A5%E5%90%8E%E7%AB%AF%E7%9A%84%E6%95%B0%E6%8D%AE%E5%8F%98%E9%87%8F%EF%BC%8C%E9%80%BB%E8%BE%91%E8%AF%AD%E5%8F%A5%EF%BC%8C%E9%80%9A%E8%BF%87%E5%90%8E%E7%AB%AF%E7%A8%8B%E5%BA%8F%E6%89%A7%E8%A1%8C%EF%BC%8C%E5%BE%97%E5%88%B0%E7%9C%9F%E5%AE%9E%E7%9A%84%E9%A1%B5%E9%9D%A2%0A%0A%0A%0A%0A%23%20%E4%BD%9C%E4%B8%9A%EF%BC%9A%0A1.%20%E5%8C%85%E7%AE%A1%E7%90%86%0A2.%20promise%0A3.%20%E9%9D%99%E6%80%81%E8%B5%84%E6%BA%90%2Bajax%E8%AF%B7%E6%B1%82%E7%9A%84node%E6%9C%8D%E5%8A%A1%E5%99%A8%0A4.%20%E9%9D%99%E6%80%81%E8%B5%84%E6%BA%90%2Bajax%E8%AF%B7%E6%B1%82%E7%9A%84express%E6%9C%8D%E5%8A%A1%E5%99%A8%0A%0A%0A%0A%0A%23%20%E5%8A%A0%E6%B2%B9%EF%BC%81%EF%BC%81%EF%BC%81%0A%0A</center></span>
</div></body></html> 